Avatar billede filix Nybegynder
25. maj 2010 - 15:37 Der 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)

--------------------------------------------------------------
Avatar billede Slettet bruger
25. maj 2010 - 17:51 #1
Forslag:
Where ([kilde] LIKE '%@Request("qkilde")%'  or isnull([kilde])) and ..
Avatar billede filix Nybegynder
25. maj 2010 - 18:06 #2
Ja det virker også dog for jeg stadig alle de rows ud hvor der også er null i "kilde"
Avatar billede 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.
Avatar billede hugopedersen Nybegynder
26. maj 2010 - 07:22 #4
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

Så vil jeg mene du får de rigtige poster.
Avatar billede filix Nybegynder
26. maj 2010 - 08:19 #5
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å.
Avatar billede Slettet bruger
26. maj 2010 - 09:20 #6
where not ( not ([kilde] LIKE '%@Request("qkilde")%') and not([moededato] LIKE '%@Request("qdato")%' ) and not (..))
Avatar billede filix Nybegynder
26. maj 2010 - 14:08 #7
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.
Avatar billede 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.
Avatar billede filix Nybegynder
26. maj 2010 - 18:06 #9
Jeg ved faktisk ik om det er adodb, men jeg kan prøve at finde ud af det.

Jeg er ikke helt sikker på hvad du mener med =0/false hvor du ville placere det. tænker du sådan her ?

where ( not ([kilde] LIKE '%@Request("qkilde")%') and not([moededato] LIKE '%@Request("qdato")%' ) = false/0
Avatar billede filix Nybegynder
28. maj 2010 - 11:38 #10
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....
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester