Avatar billede the-clint Nybegynder
15. oktober 2001 - 09:45 Der er 10 kommentarer og
1 løsning

Kombineret søgning

Er der en der ved hvordan man laver en kombineret søgning, dvs en søgning hvor man fx kan udfylde feltet navn og feltet efternavn og så få et resultat hvor begge felter ingår.
Min kode ser således ud:

sql = (\"SELECT * FROM tabel WHERE fornavne LIKE \'%\" & Request.Form(\"fornavne\") & \"%\'  And efternavn LIKE \'%\" & Request.Form(\"efternavn\") & \"%\'  And erhverv LIKE \'%\" & Request.Form(\"erhverv\") & \"%\'  And født LIKE \'%\" & Request.Form(\"fodt\") & \"%\'  And dødsdato LIKE \'%\" & Request.Form(\"dodsdato\") & \"%\'  And asf LIKE \'%\" & Request.Form(\"asf\") & \"%\'\" )
Set rs= oConn.Execute(sql)

Det her virker kun halvt. Hvis resultatet af min søgning har et tomt felt som der kan søges på, kommer posten ikke med i resultatet selvom den burde være med.

Avatar billede gulekings Nybegynder
15. oktober 2001 - 09:49 #1
Jeg tror du skal skite dine and\'s ud med OR!
Avatar billede j.robert Nybegynder
15. oktober 2001 - 10:35 #2
gulekings>> Hvis han skifter AND ud med OR, så får han jo ikke begge søgefelter med i søgningen.
Avatar billede gulekings Nybegynder
15. oktober 2001 - 10:44 #3
hmm, ok! jeg er ikke så stiv i det endnu!
Avatar billede eagleeye Praktikant
15. oktober 2001 - 10:51 #4
Jeg er forvidret over din beskrivelse.

Du har en søgeform hvor man ka indtasts:
fornavn
efternavn
mm.

Jeg forstår ikke denne \"Hvis resultatet af min søgning har et tomt felt som der kan søges på\"

Om du benytter AND eller OR kommer an på hvad du ønsker af dit søeresulttat, hvis du vil begrænse til få resultater så benyt AND hvis du vil havde mange resultater så benyt OR.

fornavn AND efternavn så skal både Fornavn og Efternavn være i posten for at den bliver valgt.
fornavn OR efternavn så skal enten Fornavn eller Efternavn være i posten for at den bliver valgt.
Avatar billede the-clint Nybegynder
15. oktober 2001 - 11:08 #5
Jeg prøver at forklare det lidt bedere.

Hvis jeg fx søger på fornavn: Jens, skal resultatet indeholde 5 poster.

Hvis ikke alle felter der hører til jens er udfyldt fx der mangler information om hans adresse, kommer han ikke med i resultatet.
Jeg har fundet ud af at det sker når det præcist er et af de felter man kan søge på der ikke er udfyldt i tabellen.

Avatar billede eagleeye Praktikant
15. oktober 2001 - 11:15 #6
Ja det er jo også rigtigt, når du benytter AND for:

hvis tabel-feltet adresse ikke indeholder noget er det sat til NULL: adresse = NULL

Hvis du på dinindtastnings form ikke skriver noget i adresse-søge feltet bliver adresse-søge ordet = \"\".

Så når du AND (NULL=\"\") vil feltet ikke bliver valgt.

Hvis du bare ligger et mellemrum i adresse feltet (i databasen) \" \" så vil det komme med.
Avatar billede the-clint Nybegynder
15. oktober 2001 - 11:52 #7
Det kan jeg bare ikke for det er ikke mig der ligger data i databasen. Der må være en anden løsning...
Avatar billede eagleeye Praktikant
15. oktober 2001 - 12:03 #8
Så kan du bygge din WHERE op ved at tjekke på om man har indtastet noget i søge-felterne  noget i den her stil, det fylder godt nok lidt:

SQLWhere = \"\"
If Request.Form(\"fornavne\") <> \"\" then
  SQLWhere = \"fornavne LIKE \'%\" & Request.Form(\"fornavne\") & \"%\'\"
End if
If Request.Form(\"efternavn\") <> \"\" then
  If SQLWhere = \"\" then
    SQLWhere = \"efternavn LIKE \'%\" & Request.Form(\"fornavne\") & \"%\'\"
  else
    SQLWhere = SQLWhere & \" And efternavn LIKE \'%\" & Request.Form(\"efternavn\") & \"%\'\"
  End if
End if
If Request.Form(\"erhverv\") <> \"\" then
If SQLWhere = \"\" then
    SQLWhere = \" erhverv LIKE \'%\" & Request.Form(\"erhverv \") & \"%\'\"
  else
    SQLWhere = SQLWhere & \" And erhverv LIKE \'%\" & Request.Form(\"erhverv \") & \"%\'\"
  End if
End if
If Request.Form(\"fodt \") <> \"\" then
If SQLWhere = \"\" then
    SQLWhere = \" født LIKE \'%\" & Request.Form(\"fodt \") & \"%\'\"
  else
    SQLWhere = SQLWhere & \" And født LIKE \'%\" & Request.Form(\"fodt \") & \"%\'\"
  End if
End if
If Request.Form(\"dodsdato \") <> \"\" then
If SQLWhere = \"\" then
    SQLWhere = \" dødsdato LIKE \'%\" & Request.Form(\"dodsdato \") & \"%\'\"
  else
    SQLWhere = SQLWhere & \" And dødsdato LIKE \'%\" & Request.Form(\"dodsdato \") & \"%\'\"
  End if
End if
If Request.Form(\"asf \") <> \"\" then
If SQLWhere = \"\" then
    SQLWhere = \" asf LIKE \'%\" & Request.Form(\"asf \") & \"%\'\"
  else
    SQLWhere = SQLWhere & \" And asf LIKE \'%\" & Request.Form(\"asf \") & \"%\'\"
  End if
End if

sql = \"SELECT * FROM tabel WHERE \" & SQLWhere
Avatar billede eagleeye Praktikant
15. oktober 2001 - 12:06 #9
du kan evt lave dem om til denne form

If Request.Form(\"dodsdato \") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"dødsdato LIKE \'%\" & Request.Form(\"dodsdato \") & \"%\'\"
End if
Avatar billede eagleeye Praktikant
16. oktober 2001 - 08:45 #10
du kan skrve det sådan her så fylder det ikke så meget:

SQLWhere = \"\"
If Request.Form(\"fornavne\") <> \"\" then
  SQLWhere = \"fornavne LIKE \'%\" & Request.Form(\"fornavne\") & \"%\'\"
End if
If Request.Form(\"efternavn\") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"efternavn LIKE \'%\" & Request.Form(\"fornavne\") & \"%\'\"
End if
If Request.Form(\"erhverv\") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"erhverv LIKE \'%\" & Request.Form(\"erhverv \") & \"%\'\"
End if
If Request.Form(\"fodt \") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"født LIKE \'%\" & Request.Form(\"fodt \") & \"%\'\"
End if
If Request.Form(\"dodsdato \") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"dødsdato LIKE \'%\" & Request.Form(\"dodsdato \") & \"%\'\"
End if
If Request.Form(\"asf \") <> \"\" then
  If SQLWhere <> \"\" then
    SQLWhere = SQLWhere & \" AND \"
  End if
  SQLWhere = SQLWhere & \"asf LIKE \'%\" & Request.Form(\"asf \") & \"%\'\"
End if

sql = \"SELECT * FROM tabel WHERE \" & SQLWhere
Avatar billede the-clint Nybegynder
16. oktober 2001 - 08:48 #11
tak for hjælpen, det virker alt sammen
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
Kurser inden for grundlæggende programmering

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