Avatar billede mvk Nybegynder
12. september 2005 - 13:31 Der 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 ?
Avatar billede fennec Nybegynder
12. september 2005 - 13:43 #1
.. or (FirstName+' '+LastName) LIKE '%" + Request.Form("navn") + "%'
Avatar billede softspot Forsker
12. september 2005 - 13:52 #2
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

SQL = "SELECT * FROM names WHERE " & SQLW
Avatar billede mvk Nybegynder
12. september 2005 - 18:05 #3
her finder den ikke Dorte Hansen (men den finder Dorte eller Hansen):

rsOverview.Source = "SELECT *  FROM dbo.tblEmployee  WHERE CivilRegistrationNumber LIKE '%" + Replace(rsOverview__varCivil, "'", "''") + "%' AND (FirstName LIKE '%" + Replace(rsOverview__varName, "'", "''") + "%' OR LastName LIKE '%" + Replace(rsOverview__varName, "'", "''") + "%')  OR (FirstName+' '+LastName) LIKE '%" + Replace(rsOverview__varName, "'", "''") + "%' ORDER BY " + Replace(rsOverview__varSort, "'", "''") + " ASC"
Avatar billede softspot Forsker
12. september 2005 - 18:30 #4
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)
Avatar billede mvk Nybegynder
13. september 2005 - 11:53 #5
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 + "%')
Avatar billede softspot Forsker
13. september 2005 - 11:57 #6
Ja, mem den bedste metode til at kontrollere om det er rigtig er at prøve det :)
Avatar billede softspot Forsker
13. september 2005 - 11:58 #7
mem = men (naturligvis)
Avatar billede mvk Nybegynder
13. september 2005 - 12:13 #8
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"
Avatar billede fennec Nybegynder
13. september 2005 - 12:21 #9
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"
Avatar billede softspot Forsker
13. september 2005 - 12:27 #10
Nåååh, der var lige denne krølle som jeg ikke lagde mærke til:

(FirstName+'%'+LastName) LIKE '%" + sName + "%'

Det skal naturligvis som fennec er inde på, ikke være mellem kolonnenavnene at % skal indsættes, det skal indsættes i sName, altså:

(FirstName+' '+LastName) LIKE '%" & Replace(sName, " ", "%") & "%'


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!)...
Avatar billede mvk Nybegynder
13. september 2005 - 13:46 #11
det spiller.,
tusinde tak
point ;)
Avatar billede fennec Nybegynder
13. september 2005 - 13:49 #12
.o) <-- One Eyed Jack
Avatar billede mvk Nybegynder
13. september 2005 - 13:54 #13
skal jeg ikke dele dem ?
Avatar billede softspot Forsker
13. september 2005 - 13:54 #14
Hvis du også mente mig... :)
Avatar billede softspot Forsker
13. september 2005 - 13:55 #15
Fint med mig.
Avatar billede mvk Nybegynder
13. september 2005 - 13:57 #16
tusinde tak for jeres hjælp! :)
Avatar billede softspot Forsker
13. september 2005 - 13:59 #17
Tak for point :)
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