Avatar billede webbe Nybegynder
27. november 2001 - 10:04 Der er 5 kommentarer og
1 løsning

Søge-sql - \"missing expression\"

Hejsa

Jeg er ved at lave en søgmulighed på et site hvor man kan vælge mellem 4 forskellige søgemuligheder.

MAN BEHØVER IKKE AT UDFYLDE ALLE FELTERNE!!!

Min sql ser således ud:

strSagsnr = Request.Form(\"strSagsnr\")
strKundenr = Request.Form(\"strKundenr\")
strDTP = Request.Form(\"dtp\")
strStatus = Request.Form(\"status\")

sql = \"SELECT * FROM Creative_task WHERE Sagsnr=\"&strSagsnr&\" OR Kundenr=\"&strKundenr&\" OR DTP=\'\"&strDTP&\"\' OR Status=\'\"&strStatus&\"\' ORDER BY Sagsnr ASC\"
Set rs = Connect.Execute(sql)

Som den ser ud nu får jeg fejlen med \"Missing expression\", men hvis jeg fx forkorter min sql til kun at søge på ét af felterne får jeg det rigtige resultat.

Hvad er der galt!?
Avatar billede eagleeye Praktikant
27. november 2001 - 10:50 #1
hvis du ikke behøver indtaste alle felt så vil den fejle hvis et tal felt er tomt.
Eks:
Hvis strSagsnr ikke er indtastet så vil der i SQL\'en stå Sagsnr =
og det vil give den fejl du skriver.

Så du skal lave nogle if sæninger som tjkker om felterne er tomme i stil med dette:

SQLWhere = \"\"
if strSagsnr <> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"Sagsnr=\" & strSagsnr
end if
if strKundenr<> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"strSagsnr=\" & strKundenr
end if
if strDTP <> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"DTP=\'\" & strDTP & \"\'\"
end if
if strStatus<> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"Status=\'\" & strStatus& \"\'\"
end if

sql = \"SELECT * FROM Creative_task WHERE \" & SQLWhere
Set rs = Connect.Execute(sql)
Avatar billede webbe Nybegynder
27. november 2001 - 11:00 #2
eagleeye:

Det virker - dog havde du glemt en \"THEN\" et par steder, men pointene er dine! ;0)
Avatar billede webbe Nybegynder
27. november 2001 - 11:02 #3
HOVSA:

Hvis jeg bruger flere kriterier (fx. Sagsnr og DTP) så får jeg følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error \'80040e14\'

[Oracle][ODBC Oracle Driver][Oracle OCI]ORA-00933: SQL command not properly ended.

/creative/frameset/search.asp, line 120
Avatar billede eagleeye Praktikant
27. november 2001 - 11:12 #4
Bruger du Oracle?

Måske der skal () omkring WHERE :
WHERE (felt=1 OR felt=2)
----

SQLWhere = \"(\"

og tilsidst:

SQLWhere = SQLWhere & \")\"
sql = \"SELECT * FROM Creative_task WHERE \" & SQLWhere


Det kan gså være at SQL\'en skal afsluttes med ;

sql = \"SELECT * FROM Creative_task WHERE \" & SQLWhere & \";\"
Avatar billede webbe Nybegynder
27. november 2001 - 11:15 #5
Ja - det kører på en ORACLE!

Men dit forslag virkede ikke - fik bare \"Missing right paranthesis!\"

Men er også lige meget - tror ikke den situation vil opstå hvor de bruger 2 valg!
Avatar billede eagleeye Praktikant
27. november 2001 - 11:17 #6
ok det jeg tænkte på var dette:


SQLWhere = \"(\"
if strSagsnr <> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"Sagsnr=\" & strSagsnr
end if
if strKundenr<> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"strSagsnr=\" & strKundenr
end if
if strDTP <> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"DTP=\'\" & strDTP & \"\'\"
end if
if strStatus<> \"\" then
  if SQLWhere <> \"\"
    SQLWhere = SQLWhere & \" OR \"
  end if
  SQLWhere = SQLWhere & \"Status=\'\" & strStatus& \"\'\"
end if
SQLWhere = SQLWhere & \")\"
sql = \"SELECT * FROM Creative_task WHERE \" & SQLWhere & \";\"
Set rs = Connect.Execute(sql)
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