12. september 2005 - 13:31Der er
15 kommentarer og 2 løsninger
Søgefunktion
jeg har en søgefunktion hvor jeg kan søge på navn. i databasen er navnet opdelt i fornavn og efternavn så når jeg skriver sqlen ser den sådan ud:
(FirstName LIKE '%" + Request.Form("navn") + "%' OR LastName LIKE '%" + Request.Form("navn")
MEN den finder ikke hvis jeg skriver hele navnet. Så hvis jeg skriver Hans Hansen finder den ikke noget - er der nogen måde hvorpå man kan sørge for at den både leder efter Fornavn ELLER Efternavn og Fornavn OG Efternavn ?
Alt efter hvordan databasen er bygget op ville jeg foretrække at splitte navnet fra formularen op og så søge som du gør nu, men bare på fornavn og efternavn.
Noget i stil med dette:
navne = split(Request.Form("navn"), " ") if ubound(navne) > 0 then efternavn = navne(ubound(navne)) SQLW = "LastName LIKE '%" & navne(ubound(navne)) & "%'" for i = 0 to ubound(navne) - 1 if len(navne(i)) > 0 then SQLW = SQLW & " OR (FirstName LIKE '%" & navne(i) & "%')" end if next else efternavn = "" SQLW = "FirstName LIKE '%" & navne(0) & "%'" end if
Det kan være du skal lave en replace på spaces til "%" i request.form("navn"), så teksten "Dorte Hansen" bliver til "Dorte%Hansen". Så burde fennec's forslag finde, selvom navnene ikke lige er formatteret ens i databasen og i søgefeltet...
Bemærk i øvrigt at der kan opstå uventede resultater når du kombinerer AND og OR pga. præcedens. Du har pt. (såvidt jeg kan tyde), flg. betingelse for match (paranteser angiver samhørsforhold):
(CivilRegistration OG (fornavn ELLER efternavn))
ELLER
Fornavn+efternavn
Jeg ville umiddelbart forventet noget i stil med:
CivilRegistration OG ((fornavn ELLER efternavn) ELLER fornavn+efternavn)
ser dette rigtigt ud. har opdelt i variabler og sat paranterser omkring alt med name
cpr = Request.Form("crn") navn = Request.Form("navn")
SELECT * FROM dbo.tblEmployee WHERE CivilRegistrationNumber LIKE '%" + crn + "%' AND ((FirstName LIKE '%" + navn + "%' OR LastName LIKE '%" + navn + "%') OR (FirstName+'%'+LastName) LIKE '%" + navn + "%')
denne virker ikke: rsOverview.Source = "SELECT * FROM dbo.tblEmployee WHERE CivilRegistrationNumber LIKE '%" + sCrn + "%' AND ((FirstName LIKE '%" + sName + "%' OR LastName LIKE '%" + sName + "%') OR (FirstName+'%'+LastName) LIKE '%" + sName + "%') ORDER BY " + sOrder + " ASC"
Du kan ikke bruge % mellem kolonnenavne. Også kan der fjernes en af parenteserne:
rsOverview.Source = "SELECT * FROM dbo.tblEmployee WHERE CivilRegistrationNumber LIKE '%" + sCrn + "%' AND (FirstName LIKE '%" + sName + "%' OR LastName LIKE '%" + sName + "%' OR (FirstName+' '+LastName) LIKE '%" + sName + "%') ORDER BY " + sOrder + " ASC"
Og da det vel er VBScript du benytter vil jeg til hver en tid anbefale at bruge ampersand (&) til at konkatenere strenge med, så du er sikker på at det er strengsammensætning og ikke addition du er ude i (det er for klarhedens skyld!)...
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.