Avatar billede renard Nybegynder
05. april 2007 - 14:57 Der er 12 kommentarer og
2 løsninger

Søgning med variable antal søgeord og kriterier.

Hej, jeg har en søgning, hvor brugeren først skal vælge mellem "fugl", "fisk" eller "ved ikke" (radiobuttonlist) og så fylde søgeord i 4 tekstbokse. Det er ikke nødvendigt at fylde ord i alle tekstbokse, hvilket er det, der har voldt problemer, da jeg ikke ved om data fra en given tekstboks skal tages med i sql-sætningen.
Man kunne vel bruge CASE til at se hvilke tekstbokse, der var fyldt, men så vidt jeg kan se, ville det give en del sql-sætninger. Hvad er den bedste løsning?
Avatar billede dr_chaos Nybegynder
05. april 2007 - 15:09 #1
lav det direkte i din sql i stedet for.
Du skal bare bruge parametre.
f.eks.

SELECT * FROM Bruger B WHERE (ISNULL(@BrugerNavn,'')='' OR B.BrugerNavn LIKE '%'+@BrugerNavn'%' ) AND (ISNULL(@Fornavn,'')='' OR B.Fornavn LIKE '%'+@Fornavn'%' )

Det kræver dog sql server.
Avatar billede dr_chaos Nybegynder
05. april 2007 - 15:10 #2
med den type sql kan du sende alle værdier med.
Avatar billede dr_chaos Nybegynder
05. april 2007 - 15:11 #3
Den kan uden tvivl gøre pænere end min udgave :)
Avatar billede renard Nybegynder
05. april 2007 - 16:29 #4
Tak. Jeg bruger mssql.
Jeg har ikke arbejdet på sql parametre før (er på to-learn listen) og er ikke så hård i sql, så jeg har lidt problemer med at omsætte dit foreslag.

Eksempel på originale sql:
"WHERE tab1.BrugerNavn LIKE '%" + brugerNavn + "%'";

Hvordan skal det se ud?
Avatar billede dr_chaos Nybegynder
05. april 2007 - 17:30 #5
noget med:
"WHERE (ISNULL(" + brugerNavn + ",'')='' OR  tab1.BrugerNavn LIKE '%" + brugerNavn + "%')";
Avatar billede renard Nybegynder
05. april 2007 - 18:09 #6
Er det bedre uden sql parametre?

Med: "WHERE (ISNULL(" + brugerNavn + ",'')='' OR  tab1.BrugerNavn LIKE '%" + brugerNavn + "%')";
får jeg dette (bruger en webservice):
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Incorrect syntax near ','.
  at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

Jeg er lidt på bar bund - er glad for hjælpen! :)
Avatar billede hmortensen Nybegynder
05. april 2007 - 19:15 #7
Du bør altid bruge parametre.
Du kan læse en lille artikel om emnet her: http://www.eksperten.dk/artikler/831

I dit tilfælde kunne du måske opbygge din sql sætning med en løkke der kontrollerer om feltet er udfyldt og så appender til sætningen og sætter det pågældende parameter.
Avatar billede dr_chaos Nybegynder
05. april 2007 - 19:22 #8
"WHERE (ISNULL(" + brugerNavn + ",'''')='''' OR  tab1.BrugerNavn LIKE '%" + brugerNavn + "%')";
Avatar billede renard Nybegynder
05. april 2007 - 19:37 #9
Jeg får desværre samme fejl, dr_chaos. Er det korrekt, at det skal være 4 single quotes, i.e.: brugerNavn + ",' ' ' ')=' ' ' ' ?

Tak for link og tip, hmortensen.

Jeg kan desværre ikke følge med indtil på mandag - god påske!
Avatar billede dr_chaos Nybegynder
05. april 2007 - 20:03 #10
skal lige teste inden jeg svarer.
prøv med

"WHERE (ISNULL(" + brugerNavn + ",'''''')='''''' OR  tab1.BrugerNavn LIKE '%" + brugerNavn + "%')";
Avatar billede renard Nybegynder
17. april 2007 - 00:51 #11
Fik løst det, kom med et svar begge 2. Tak.
Avatar billede dr_chaos Nybegynder
23. april 2007 - 15:10 #12
svar :)
Avatar billede hmortensen Nybegynder
23. april 2007 - 17:25 #13
Det var så lidt :)

Måske du kan vise din løsning, så andre kan få glæde af den.
Avatar billede renard Nybegynder
24. april 2007 - 01:46 #14
Jeg ville normalt vise min løsning, hmortensen - det er jo det der hjælper til at gøre eksperten endnu federe - men 'løsningen' blev at gøre noget helt andet. Jeg skal nok få det løst senere, men lige nu er der ikke tid :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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