25. maj 2010 - 15:37Der er
9 kommentarer og 1 løsning
fejl ved null værdier i db i søgning med flere værdier
Hejsa Jeg sidder med en case jeg ikke helt kan knække.
Jeg har en database hvor jeg skal lave en avanceret søgning til. jeg har en hjemmeside hvor de kan indputte i 10 forskellige felter. Selvfølgelig skal de kun nøjes med f.eks. et felt
Det er et krav at det forbliver i access/jet.
jeg har prøvet en masse forskelligt(f.eks. freetext search teorien, den gør så at hver felt søger i alle)
Nedenfor har jeg prøvet at opsætte et eksempel på hvordan den køre nu. '%@Request("qsag")%' disse bliver replaced af de variabler som kommer fra siden af.
Problemet er ved at spørge om is null, er at jeg også for de rækker ud med null values i. Men hvis man fjerner Is null, forsvinder alle de rækker som har null values et sted i dem, dette har jeg læst er en "funktion" som ligger i jet.
Nogen forslag ? har prøvet lidt af hvert og er kørt fast ! -------------------------------------------------------------- SELECT moededato, emnet FROM [database] WHERE ([kilde] LIKE '%@Request("qkilde")%' or [kilde] is null) and ([moededato] LIKE '%@Request("qdato")%' or [moededato] is null) and ([moedetype] LIKE '%@Request("qtype")%' or [moedetype] is null) and ([sagsnr] LIKE '%@Request("qsag")%' or [fravaerende] is null)
Ja det virker også dog for jeg stadig alle de rows ud hvor der også er null i "kilde"
Synes godt om
Slettet bruger
25. maj 2010 - 20:00#3
Ja, også dem med null i - jeg har nok ikke rigtigt forstået dit spørgsmål!
Du siger: 'Men hvis man fjerner Is null, forsvinder alle de rækker som har null values et sted i dem'
Hvis du med 'fjerner' mener fjerner (sammen med 'or ...')i where delen af det sql udtryk du skriver til slut i spørsmålet hertil, så kan jeg ikke se at det er rigtigt.
Skal dit problem forstås på den måde at du har 10 forskellige felter der kan tastes et søgekriterie ind i for 10 forskellige felter i din db?
I så fald vil jeg påstå at du skal bygge din SQL op temmeligt anderledes ved at checke for om der er indtastet noget i de enkelte felter
(Hvordan det skal laves i ASP eller hvad nu du bruger aner jeg ikke, men....) strSQL=" SELECT moededato, emnet FROM [database] WHERE " IF %@Request("qkilde")% <> "" Then strSQL = strSQL & "[kilde] LIKE '%@Request("qkilde")%'" End If og så videre
Ja jeg kan godt forstå jeres forvirring nu hvor jeg læser min post igennem igen.
Mit problem er at den database jeg sidder med, har en masse null values i sig. Hvis man bare laver denne : -------------------------------------------------------------- WHERE ([beskrivelse af sagen] LIKE '%@Request("qbeskrivelse")%' ) and ([indstilling] LIKE '%@Request("emne")%') -------------------------------------------------------------- Så kigger den ikke i de rækker som måtte indholde en null value et sted. Hvilket vil sige at søgningen sker i måske 400poster(uden null values) istedet for de eksisterende 7000 poster(alle poster) så prøvede jeg at lave : -------------------------------------------------------------- WHERE ([emnet] LIKE '%@Request("qbeskrivelse")%' or [emnet] is null ) and ([indstilling] LIKE '%@Request("emne")%' or [indstilling] is null) -------------------------------------------------------------- Dette fungere, dog for jeg selvfølgelig også alle null values ud.
Jeg søger en gylden mellemvej hvis man kan sige det, hvor den selvfølgelig skal kigge i poster der indeholder null, men skal ikke tage dem med ud med mindre de bliver fundet på noget af deres indhold.
Og du har ret Hugo, jeg burde bygge en mere konkret string op i et programmerings sprog, men problemet er bare at jeg sidder i et cms som binder mig.
sorry hvis det bliver kryptisk igen, kan bare ikke se andre måder at forklare det på.
Synes godt om
Slettet bruger
26. maj 2010 - 09:20#6
where not ( not ([kilde] LIKE '%@Request("qkilde")%') and not([moededato] LIKE '%@Request("qdato")%' ) and not (..))
Jeg kan godt se din logik og har prøvet den af, kan ikke få den til at fungerer med "Where NOT" det vil den ikke godtage. Prøvet på forskellige måder dog uden held.
Synes godt om
Slettet bruger
26. maj 2010 - 17:41#8
pudsigt at 'not' mangler - er det over adodb? Har du forsøgt '=false' og '=0'.
Endelig er operationer på recordsættet - filtrering eller forholdende sig til hver enkelt post.
Jeg fik den klaret, med lidt hjælp. Brugt en access only funktion
WHERE (IIf(IsNull(kilde), '', kilde) LIKE '%@Request("qkilde")%') AND (IIf(IsNull(moededato), '', moededato) LIKE '%@Request("qdato")%') AND etc etc etc....
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.