If (Request.Form("beskrivelse") <> "") AND (Request.Form("beskrivelse2") <> "") AND (Request.Form("vekst") <> "") AND (Request.Form("lov") <> "") AND (Request.Form("blomst") <> "") AND (Request.Form("frugt") <> "") AND (Request.Form("alder") <> "") AND (Request.Form("str") <> "") Then
Sådan som den er formuleret så skal *samtlige* felter i din form være udfyldt. Desuden skal det som fremsøges opfylde *alle* søgekriterierne. Dette er temmeligt skrappe krav, og hvis der bare er et sted det ikke er opfyldt så bliver der ikke vist noget.
Det er meningen at man kan lade nogle felter være tomme, hvis man ikke ønsker at sortere efter dem. Og f.eks kun skrive i et og få svar ud fra dét ene felt man har udfyldt.
- så skal der flere LIKE-udtryk med i WHERE-delen. Dette betyder at der samtidigt skal en AND imellem hver af dem (alternativt en OR):
sql = "SELECT * FROM dinTabel WHERE ... eksempel1 LIKE '%" & Request.Form("eksempel1") & "%' AND eksempel2 LIKE '%" & Request.Form("eksempel2") & "%' ..."
Problemet er nu, at hvis der ikke står noget i et af felterne så skal det tilsvarende LIKE-led ikke med. Vi er altså nødt til at løbe de mulige felter igennem og - for hvert felt - se om dette er udfyldt eller ej. Hvis det er udfyldt, så skal der et LIKE-led på, og hvis der er mere end ét LIKE-led ialt så skal der AND imellem dem. Til dette formål har vi funktionen AddToWhereLed(), men mere om denne om lidt.
Dette er altså problemstillingen.
Lad os starte fra starten. Vi bygger din SQL-sætningen op bid for bid. Først SELECT-keyword'et
sql = "SELECT * FROM lager"
Til denne skal vi nu have lagt en WHERE-del. Denne skal i dit tilfælde have et (potentielt) LIKE-led for følgende felter:
Og så til funktionen AddToWhereLed(), som ser sådan her ud:
Sub AddToWhereLed(key) value = "" & Request.Form(key)
If value <> "" Then If whereLed <> "" Then whereLed = whereLed & " AND" End If whereLed = whereLed & " " & key & " LIKE '%" & value & "%'" End If End Sub
Denne er sådan indrettet at hvis du kalder AddToWhereLed("blomst") så vil den:
1) Undersøge om Request.Form("blomst") er tom eller ej. Hvis den er tom, så sker der ikke noget for dette indtastnings-felt. 2) Hvis den ikke er tom, så lægges der et LIKE-led på whereLed-variablen. 3) Hvis der allerede er andre LIKE-led i whereLed-variablen så adskille det nye fra disse med en AND (som du kan vælge at lave om til en OR hvis det i stedet er det du ønsker).
I tilfældet "blomst", kommer dette LIKE-led til at se sådan her ud:
Nu har vi så lavet WHERE-delen, og den skal så bare smækkes i enden af SQL-sætningen fra før.
Men vent: whereLed kan faktisk godt være hel tom. Dette sker hvis der slet ikke var udfyldt nogle felter overhovedet. Hvis den derimod ikke er tom, så mangler vi faktisk at have selve WHERE-keyword'et med.
Derfor:
If whereLed <> "" Then whereLed = " WHERE" & whereLed End If
Og så bag på SQL-sætningen:
sql = sql & whereLed
.oOo.
Til sidst samles det hele i et stort script:
' Definition af proceduren AddToWhereLed(). Sub AddToWhereLed(key) value = "" & Request.Form(key)
If value <> "" Then If whereLed <> "" Then whereLed = whereLed & " AND" End If whereLed = whereLed & " " & key & " LIKE '%" & value & "%'" End If End Sub
If (Request.Form("beskrivelse") <> "") OR (Request.Form("beskrivelse2") <> "") OR (Request.Form("vekst") <> "") OR (Request.Form("lov") <> "") OR (Request.Form("blomst") <> "") OR (Request.Form("frugt") <> "") OR (Request.Form("alder") <> "") OR (Request.Form("str") <> "") Then
' Start på SQL-sætningen. sql = "SELECT * FROM lager"
Det gjorde det i hvertfald! Fedt du ider bruge så lang tid på aet hjælpe mig!
Forstår bare ikke det her: --- Sub AddToWhereLed(key) value = "" & Request.Form(key) --- Så gør den: value = "" & Request.Form(key) For hver: AddToWhereLed("")
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.