12. marts 2005 - 21:09Der er
36 kommentarer og 1 løsning
At afgrænse en søgeSQL med en FORM selection, hvordan gør jeg?
Jeg har en SQL som virker men skal udvide den. Nogle elementer har jeg fundet frem, man kan ikke overskue at sætte det sammen. Den som vil hjælpe kan få 100 poinst. Forklaring: Jeg skal have koblet en FORM på en SQL til at afgrænse søgningen inden for et område. De tre områder der skal kunne afgrænse søgningen ses nederst i vedlagte CASE. Det udkommenterede medlemsnr (øverst), skal benyttes til sammen med formen nedenunder:
En del af min SQL: strSoegSql = "Select * from medlemmer where " &_ ' "medlemsnr = '%"&strKey&"%' " & "OR " &_ "Firma LIKE '%"&strKey&"%' " & "OR " &_ "Adresse LIKE '%"&strKey&"%' " & "OR " &_
Men jeg skal på en eller anden måde tage højde for følgende, hvor CASE ID = det som formen returnere: select case i case 3 sql = "SELECT * FROM medlemmer WHERE medlemsnr like '30%'" & sort case 4 sql = "SELECT * FROM medlemmer WHERE medlemsnr like '40%' OR medlemsnr like '50%'" & sort case 6 sql = "SELECT * FROM medlemmer WHERE medlemsnr like '60%' OR medlemsnr like '70%'" & sort end select
Er dette klart nok til at du kan hjælpe eller give et tip?
select case i case 3 strSoegSql = strSoegSql & "medlemsnr like '30%'" & sort case 4 strSoegSql = strSoegSql & "medlemsnr like '40%' OR medlemsnr like '50%'" & sort case 6 strSoegSql = strSoegSql & "medlemsnr like '60%' OR medlemsnr like '70%'" & sort end select
Den melder følgende fejl på denne linie 86 som indholder rs.Open strSoegSql, conn
fejlen: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. /2002/sogning.asp, line 86
Men jeg tror næsten den er der, jeg har flyttet formen til et andet sted. min kode: <%
strKey = request.form("inpSoeg")
strSoegSql = "SELECT * FROM medlemmer WHERE medlemsnr = '%"&strKey&"%' " & "OR " &_ "Firma LIKE '%"&strKey&"%' " & "OR " &_ "Adresse LIKE '%"&strKey&"%' " & "OR " &_ "Adresse2 LIKE '%"&strKey&"%' " & "OR " &_ "vBy LIKE '%"&strKey&"%' " & "OR " &_ "Kontakt LIKE '%"&strKey&"%' " & "OR " &_ "telefon LIKE '%"&strKey&"%' " & "OR " &_ "email LIKE '%"&strKey&"%' " & "OR " &_ "fornavn LIKE '%"&strKey&"%' " & "OR " &_ "efternavn LIKE '%"&strKey&"%' " & "OR " &_ "foedeaar LIKE '%"&strKey&"%' " & "OR " &_ "uddannelse LIKE '%"&strKey&"%' " & "OR " &_ "ansaettelse LIKE '%"&strKey&"%' " & "OR " &_ "afdeling LIKE '%"&strKey&"%' " & "OR " &_ "mail LIKE '%"&strKey&"%' " & "OR " &_ "web LIKE '%"&strKey&"%' " & "OR " &_ "tlf LIKE '%"&strKey&"%' " & "OR " &_ "mobil LIKE '%"&strKey&"%' " & "OR " &_ "fax LIKE '%"&strKey&"%' " %> <% select case i case 3 strSoegSql = strSoegSql & "medlemsnr like '30%'" & sort case 4 strSoegSql = strSoegSql & "medlemsnr like '40%' OR medlemsnr like '50%'" & sort case 6 strSoegSql = strSoegSql & "medlemsnr like '60%' OR medlemsnr like '70%'" & sort end select
Set Conn = Server.CreateObject("ADODB.connection") Conn.ConnectionString = Application("db_ConnectionString") Conn.Open set rs = Server.CreateObject("ADODB.recordset") rs.Open strSoegSql, conn %>
Hvad kan det skyldes, tror du? (Data type mismatch in criteria expression)?
select case i case 1 strSoegSql = strSoegSql & "medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%'" & sort case 3 strSoegSql = strSoegSql & "medlemsnr like '30%'" & sort case 4 strSoegSql = strSoegSql & "medlemsnr like '40%' OR medlemsnr like '50%'" & sort case 6 strSoegSql = strSoegSql & "medlemsnr like '60%' OR medlemsnr like '70%'" & sort end select
Den fejler med: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'.
SELECT * FROM medlemmer WHERE Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse LIKE '%hans%' OR ansaettelse LIKE '%hans%' OR afdeling LIKE '%hans%' OR mail LIKE '%hans%' OR web LIKE '%hans%' OR tlf LIKE '%hans%' OR mobil LIKE '%hans%' OR fax LIKE '%hans%' medlemsnr like '30%' Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'.
select case i case 1 strSoegSql = strSoegSql & "medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%';" case 3 strSoegSql = strSoegSql & "medlemsnr like '30%';" case 4 strSoegSql = strSoegSql & "medlemsnr like '40%' OR medlemsnr like '50%';" case 6 strSoegSql = strSoegSql & "medlemsnr like '60%' OR medlemsnr like '70%';" end select
Den giver stadigt denne feedback? Men hvorfor stopper response.write sådan .... uddannelse L' ??
SELECT * FROM medlemmer WHERE Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse LIKE '%hans%' OR ansaettelse LIKE '%hans%' OR afdeling LIKE '%hans%' OR mail LIKE '%hans%' OR web LIKE '%hans%' OR tlf LIKE '%hans%' OR mobil LIKE '%hans%' OR fax LIKE '%hans%' medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%'; Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'.
Kan det være noget med dette her: http://support.microsoft.com/default.aspx/kb/223758 The total number of bytes allocated for all product attributes exceeds the maximum number of bytes per row that SQL Server allows
Jeg er virkeligt taknemligt for den hjælp du kommer med.
Jeg har nu gjort sådan: Set Conn = Server.CreateObject("ADODB.connection") Conn.ConnectionString = Application("db_ConnectionString") Conn.Open set rs = Server.CreateObject("ADODB.recordset") 'rs.Open strSoegSql, conn response.Write(strSoegSql)
Nu fejler den på do until rs.EOF Men det er vel bare pga. at recordset ikke bliver åbnet.
Stadigt intet held... SELECT * FROM medlemmer WHERE Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse LIKE '%hans%' OR ansaettelse LIKE '%hans%' OR afdeling LIKE '%hans%' OR mail LIKE '%hans%' OR web LIKE '%hans%' OR tlf LIKE '%hans%' OR mobil LIKE '%hans%' OR fax LIKE '%hans%' medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%'; Medlemmer > Søgning > Resultat
ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed. sogning.asp, line 108
Det var bare noget fra min kode jeg var kommet til at paste med i SQLén. Sorry med respons.end, den er på nu, men den udskriver stadigt følgende.
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'. sogning.asp, line 91
strSoegSql = "SELECT * FROM medlemmer WHERE " &_ "Firma LIKE '%"&strKey&"%' " & "OR " &_ "Adresse LIKE '%"&strKey&"%' " & "OR " &_ "Adresse2 LIKE '%"&strKey&"%' " & "OR " &_ "vBy LIKE '%"&strKey&"%' " & "OR " &_ "Kontakt LIKE '%"&strKey&"%' " & "OR " &_ "telefon LIKE '%"&strKey&"%' " & "OR " &_ "email LIKE '%"&strKey&"%' " & "OR " &_ "fornavn LIKE '%"&strKey&"%' " & "OR " &_ "efternavn LIKE '%"&strKey&"%' " & "OR " &_ "foedeaar LIKE '%"&strKey&"%' " & "OR " &_ "uddannelse LIKE '%"&strKey&"%' " & "OR " &_ "ansaettelse LIKE '%"&strKey&"%' " & "OR " &_ "afdeling LIKE '%"&strKey&"%' " & "OR " &_ "mail LIKE '%"&strKey&"%' " & "OR " &_ "web LIKE '%"&strKey&"%' " & "OR " &_ "tlf LIKE '%"&strKey&"%' " & "OR " &_ "mobil LIKE '%"&strKey&"%' " & "OR " &_ "fax LIKE '%"&strKey&"%' "
'response.Write(INT(request.form("select"))) i = INT(request.form("select"))
select case i case 1 strSoegSql = strSoegSql & "medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%';" case 3 strSoegSql = strSoegSql & "medlemsnr like '30%';" case 4 strSoegSql = strSoegSql & "medlemsnr like '40%' OR medlemsnr like '50%';" case 6 strSoegSql = strSoegSql & "medlemsnr like '60%' OR medlemsnr like '70%';" end select
Set Conn = Server.CreateObject("ADODB.connection") Conn.ConnectionString = Application("db_ConnectionString") Conn.Open set rs = Server.CreateObject("ADODB.recordset") rs.Open strSoegSql, conn response.Write(strSoegSql) %>
Det var bare fordi jeg sidder og fitler lidt frem og tilbage for at prøve nogle forskellige ting, det er stadigt ikke lykkedes mig.
'rs.Open strSoegSql, conn response.Write(strSoegSql) response.end Giver dette: SELECT * FROM medlemmer WHERE Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse LIKE '%hans%' OR ansaettelse LIKE '%hans%' OR afdeling LIKE '%hans%' OR mail LIKE '%hans%' OR web LIKE '%hans%' OR tlf LIKE '%hans%' OR mobil LIKE '%hans%' OR fax LIKE '%hans%' medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%';
og rs.Open strSoegSql, conn response.Write(strSoegSql) response.end
giver følgende:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'.
sogning.asp, line 91
Den øvrige kode er 100% som ovenover, det du har modtaget.
strSoegSql = "SELECT * FROM medlemmer WHERE " &_ "Firma LIKE '%"&strKey&"%' " & "OR " &_ "Adresse LIKE '%"&strKey&"%' " & "OR " &_ "Adresse2 LIKE '%"&strKey&"%' " & "OR " &_ "vBy LIKE '%"&strKey&"%' " & "OR " &_ "Kontakt LIKE '%"&strKey&"%' " & "OR " &_ "telefon LIKE '%"&strKey&"%' " & "OR " &_ "email LIKE '%"&strKey&"%' " & "OR " &_ "fornavn LIKE '%"&strKey&"%' " & "OR " &_ "efternavn LIKE '%"&strKey&"%' " & "OR " &_ "foedeaar LIKE '%"&strKey&"%' " & "OR " &_ "uddannelse LIKE '%"&strKey&"%' " & "OR " &_ "ansaettelse LIKE '%"&strKey&"%' " & "OR " &_ "afdeling LIKE '%"&strKey&"%' " & "OR " &_ "mail LIKE '%"&strKey&"%' " & "OR " &_ "web LIKE '%"&strKey&"%' " & "OR " &_ "tlf LIKE '%"&strKey&"%' " & "OR " &_ "mobil LIKE '%"&strKey&"%' " & "OR " &_ "fax LIKE '%"&strKey&"%' "
'response.Write(INT(request.form("select"))) i = INT(request.form("select"))
select case i case 1 strSoegSql = strSoegSql & "medlemsnr like '%30%' OR medlemsnr LIKE '%40%' OR medlemsnr like '%50%' OR medlemsnr like '%60%' OR medlemsnr like '%70%';" case 3 strSoegSql = strSoegSql & "medlemsnr like '%30%';" case 4 strSoegSql = strSoegSql & "medlemsnr like '%40%' OR medlemsnr like '%50%';" case 6 strSoegSql = strSoegSql & "medlemsnr like '%60%' OR medlemsnr like '%70%';" end select
Set Conn = Server.CreateObject("ADODB.connection") Conn.ConnectionString = Application("db_ConnectionString") Conn.Open set rs = Server.CreateObject("ADODB.recordset") rs.Open strSoegSql, conn %>
Det giver: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Firma LIKE '%hans%' OR Adresse LIKE '%hans%' OR Adresse2 LIKE '%hans%' OR vBy LIKE '%hans%' OR Kontakt LIKE '%hans%' OR telefon LIKE '%hans%' OR email LIKE '%hans%' OR fornavn LIKE '%hans%' OR efternavn LIKE '%hans%' OR foedeaar LIKE '%hans%' OR uddannelse L'.
strSoegSql = "SELECT * FROM medlemmer WHERE " &_ "Firma LIKE '%"&strKey&"%' " & "OR " &_ "Adresse LIKE '%"&strKey&"%' " & "OR " &_ "Adresse2 LIKE '%"&strKey&"%' " & "OR " &_ "vBy LIKE '%"&strKey&"%' " & "OR " &_ "Kontakt LIKE '%"&strKey&"%' " & "OR " &_ "telefon LIKE '%"&strKey&"%' " & "OR " &_ "email LIKE '%"&strKey&"%' " & "OR " &_ "fornavn LIKE '%"&strKey&"%' " & "OR " &_ "efternavn LIKE '%"&strKey&"%' " & "OR " &_ "foedeaar LIKE '%"&strKey&"%' " & "OR " &_ "uddannelse LIKE '%"&strKey&"%' " & "OR " &_ "ansaettelse LIKE '%"&strKey&"%' " & "OR " &_ "afdeling LIKE '%"&strKey&"%' " & "OR " &_ "mail LIKE '%"&strKey&"%' " & "OR " &_ "web LIKE '%"&strKey&"%' " & "OR " &_ "tlf LIKE '%"&strKey&"%' " & "OR " &_ "mobil LIKE '%"&strKey&"%' " & "OR " &_ "fax LIKE '%"&strKey&"%' "
'response.Write(INT(request.form("select"))) i = INT(request.form("select"))
select case i case 1 strSoegSql = strSoegSql & "OR medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%';" case 3 strSoegSql = strSoegSql & "OR medlemsnr like '30%';" case 4 strSoegSql = strSoegSql & "OR medlemsnr like '40%' OR medlemsnr like '50%';" case 6 strSoegSql = strSoegSql & "OR medlemsnr like '60%' OR medlemsnr like '70%';" end select
Set Conn = Server.CreateObject("ADODB.connection") Conn.ConnectionString = Application("db_ConnectionString") Conn.Open set rs = Server.CreateObject("ADODB.recordset") rs.Open strSoegSql, conn %>
Noget HTML kommer her
<% rs.close Conn.close
%> <% end if %> </body> </html>
ellers kan du ikke sende mig din base på mrblade at ofir.dk, så er det lidt nemmere for mig at teste det.
strSoegSql = strSoegSql & "AND medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%';" case 3 strSoegSql = strSoegSql & "AND medlemsnr like '30%';" case 4 strSoegSql = strSoegSql & "AND medlemsnr like '40%' OR medlemsnr like '50%';" case 6 strSoegSql = strSoegSql & "AND medlemsnr like '60%' OR medlemsnr like '70%';" end select
men selv dette er ikke nok da jeg kun vil vise dem som findes under et nummer. Ligenu er det bare 60 eller 70 findes i medlemsnummer, så er den ligeglad med søgeordet.
Det er vel noget med en SQL i en SQL men jeg vil lade dig være i fred nu. ;o)
Du har nok ret i at det skal være AND, nu ved jeg ikke hvordan du har bygget dine medlemsnumre op, men når du bruger %% får du alle forkomster hvor det optræder i feltet. hvis det altid er enten 30, 40, 50, 60 eller 70, så kan du bare skrive:
Det bliver vist lidt vanskeligt det her, da det er 5 cifrer og undtagelsen skal gælde de første to cifre som indikere hvilken regioen medlemmet kommer fra.
jeg prøved noget men det gik ikke
case 1 strSoegSql = strSoegSql & "AND medlemsnr like '30%' AND medlemsnr LIKE '40%' AND medlemsnr like '50%' AND medlemsnr like '60%' AND medlemsnr like '70%';" case 3 strSoegSql = strSoegSql & "AND medlemsnr NOT like '40%' AND medlemsnr NOT like '50%' AND medlemsnr NOT like '60%' AND medlemsnr NOT like '70%';" case 4 strSoegSql = strSoegSql & "AND medlemsnr NOT like '30%' AND medlemsnr NOT like '60%' AND medlemsnr NOT like '70%';" case 6 strSoegSql = strSoegSql & "AND medlemsnr NOT like '30%' AND medlemsnr NOT like '40%' AND medlemsnr NOT like '50%';" end select
Den siger så: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'SUBSTRING' in expression.
Kan en SQl regne ud af hvis man skrive or1...or2...or3...or4...and...or at det skal være bare én af de første or men efter AND skal en af dem være indholdt. Bliver det sidste or ikke bare på lige vilkår som de andre. i virkeligheden burde det være (or1...or2...or3...or4...) and (a or b) det første går på søgestrengen og det sidste på medlemsnummeret som giver lokation.
Når, med her er hvad jeg har prøve som giver fejlen ovenover.
case 1 strSoegSql = strSoegSql & "AND SUBSTRING(medlemsnr,2) = '30' OR SUBSTRING(medlemsnr,2) = '40' OR SUBSTRING(medlemsnr,2) = '50' OR SUBSTRING(medlemsnr,2) = '60' OR SUBSTRING(medlemsnr,2) = '70' ;" case 3 strSoegSql = strSoegSql & "AND SUBSTRING(medlemsnr,2) = '60' ;" case 4 strSoegSql = strSoegSql & "AND SUBSTRING(medlemsnr,2) = '40' OR SUBSTRING(medlemsnr,2) = '50' ;" case 6 strSoegSql = strSoegSql & "AND SUBSTRING(medlemsnr,2) = '60' OR SUBSTRING(medlemsnr,2) = '70' ;" end select
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.