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 ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.