webForumDet fria alternativet

Två villkor uppfyllda ?

Databaser & SQL

14 svar · 365 visningar · startad av Pellefant

Medlem sedan maj 20023 372 inlägg
Frågan#1

Hejsan!

Hur har jag lyckats klanta mig med denna?

SQL="SELECT * FROM Brunswick WHERE City = city AND Name = name ORDER BY Name ASC;"

Oavsett innehållet i city och name så plockas(väljs) hela innehållet fram från databasen.

En följdfråga på en gång, om:

*namevariabeln delas upp på name1 och name2

*cityvariabeln kan även ha alternativet "all"

Hur gör man då istället så att det räcker med att name1 eller name2 passar in på namekolumnen, samt att om city=all så väljs alla städer där namnvillkoret är uppfyllt(om en city är vald så väljs bara den staden)

Mer kod för den vetgirige:

<%
city = request.form("city")
name = request.form("name")
%>
<p>
Searchdata:
<%=city%>
<p>
<%=name%>
<p>
<%
Set Databas = Server.CreateObject("ADODB.Connection")
	Databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("phone_numbers.mdb")
	Set RecSet = Server.CreateObject("ADODB.Recordset")
	SQL="SELECT * FROM Brunswick WHERE City = city AND Name = name ORDER BY Name ASC;" 
	RecSet.Open SQL, Databas, 3, 3 
	%>

	
	<% Do until RecSet.EOF 	%>
		<%=Recset("name")%><br>
			<%=Recset("city")%><p>
		<%Recset.movenext
		loop  %>

	
	<%RecSet.Close 
	Databas.Close %>
Medlem sedan mars 20025 907 inlägg
#2

borde det inte vara:

SQL="SELECT * FROM Brunswick WHERE City = "&city&" AND Name = "&name&" ORDER BY Name ASC;"
Medlem sedan dec. 20003 887 inlägg
#3
<%
city = request.form("city")
name1 = request.form("name")
name2 = ? [blue]' Jag vet inte hur du vill dela upp name som...[/blue]
%>
<p>
Searchdata:
<%=city%>
<p>
<%=name%>
<p>
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("phone_numbers.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")

If city = vbNullString Then
    strCity = ""
Else
    strCity = "City = '" & city & "' AND "
End If

SQL="SELECT * FROM Brunswick WHERE " & strCity & "(Name = '" & name1 & "' OR Name = '" & name2 & "') ORDER BY Name ASC;" 
RecSet.Open SQL, Databas, 3, 3 

Do until RecSet.EOF
    Response.Write (Recset("name") & "<br>")
    Response.Write (Recset("city") & "<p>")
    Recset.movenext
Loop

RecSet.Close 
Databas.Close
%>

Något sådant du söker efter?

Medlem sedan maj 20023 372 inlägg
#4

Tack för all hjälp.

Såhär delade jag uppp Name:
http://www.webforum.nu/showthread.php?s=&postid=565668#post565668

En liten sista fråga i ämnet:

SQL satsen väljer nu fram namn som är PRECIS som hela name-kolumninnehållet, hur ändrar man så att om man tex säker på "Anna", så hittas "Anna Todd-Smith" (nu måste man skriva just "Anna Todd-Smith" i sökrutan.

Dvs, skriver man "Anna, Hyde" i sökrutan hur gör man då får att datorn ska välja alla rader där Anna och Hyde förekommer, tex "Anna Chaplin", "Mr Hyde" och "Sara Hydepark"

SQL="SELECT * FROM Brunswick WHERE " & strCity & "(Name = '" & name1 & "' OR Name = '" & name2 & "') ORDER BY Name ASC;" 
RecSet.Open SQL, Databas, 3, 3

Tack för ordet. :)

Medlem sedan dec. 20003 887 inlägg
#5
astrName() = Split(name, ",")

strName = "Name = '%" & Trim(astrName(0)) & "%'"

If Ubound(astrName) > 1 Then
    strName = strName & " OR Name = '%" & Trim(astrName(1)) & "%'"
End If

SQL="SELECT * FROM Brunswick" & _
" WHERE " & strCity & " (" & strName & ")" & _ 
" ORDER BY Name ASC;"
Medlem sedan juni 200032 967 inlägg
#6

byt ut = mot LIKE-operatorn för sökning.

mvh,

Medlem sedan maj 20023 372 inlägg
#7

Hm...får inte ihop det ändå.

På:
name = request.form("Name")

astrName() = Split(name, ",")

Så får jag : Type mismatch: 'astrName'

Har även testat med: astrName = Split(name, ",") , men förmodar att det är fel, för då hittas ingenting, även om det stämmer överens mot db:n.

Medlem sedan dec. 20003 887 inlägg
#8

Ops... så kan det gå, när man inte tänker hela vägen ;)

Dim astrName()

If city = vbNullString Then
    strCity = ""
Else
    strCity = "City LIKE '%" & city & "%' AND "
End If

If Instr(name, ",") > 0 Then
    astrName = Split(name, ",")
    strName = "Name LIKE '%" & Trim(astrName(0)) & "%' OR Name LIKE '%" & Trim(astrName(1)) 
Else
    strName = "LIKE = '%" & Trim(name) & "%'"
End If

SQL="SELECT * FROM Brunswick" & _
" WHERE " & strCity & " (" & strName & ")" & _ 
" ORDER BY Name ASC;"

Jag har tyvärr ingen server att testa mot, så ibland dyker det upp fel, som jag helt enkelt inte tänker på... Du kan ju testa byta mot astrName = Split(Request.Form("name")) och se om det fungerar bättre.

Medlem sedan maj 20023 372 inlägg
#9

Hej igen! :)

Fick det inte att fungera. Jag skrev om det lite, så att jag själv ska förstå det hela. Nu splittar den upp namnet i två variabler.

Ett exempel:

Jag söker efter "Todd, Sharon" i city: Brunswick, då får jag denna utdata:

name1:Todd
name2:Sharon
strName:Name LIKE '%Todd%' OR Name LIKE '%Sharon%'

Microsoft JET Database Engine error '80040e14'

Syntax error in query expression 'City LIKE '%Brunswick%' AND ' (Name LIKE '%Todd%' OR Name LIKE '%Sharon%') ORDER BY Name ASC;'.

/eze/searchresult.asp, line 89

Jag har försökt skriva om SQL satsen med name1, name2 istället, men det verkar inte ha gått så bra. :(

If Instr(strName, ",") > 0 Then
    strName = "Name LIKE '%" & Trim(name1) & "%' OR Name LIKE '%" & Trim(name2) & "%'" 
Else
    strName = "LIKE = '%" & Trim(name1) & "%'"
End If

SQL="SELECT * FROM Brunswick" & _
" WHERE " & strCity & " (" & strName & ")" & _ 
" ORDER BY Name ASC;"

Hela koden, men den behövs nog egentligen inte nu:

<%
city = request.form("city")

If city = vbNullString Then
    strCity = ""
Else
    strCity = "City = '" & city & "' AND "
End If

strName = request.form("name")
arrName = split(strName, ",")
name1 = trim( arrName(0) )
if ubound( arrName ) = 1 then
  name2 = trim( arrName(1) )
else
  name2 = ""
end if
%>
<p>
name1:<%=name1%><br>
name2:<%=name2%><p>
<p>
<%
If city = vbNullString Then
    strCity = ""
Else
    strCity = "City LIKE '%" & city & "%' AND '"
End If

If Instr(strName, ",") > 0 Then
    strName = "Name LIKE '%" & Trim(name1) & "%' OR Name LIKE '%" & Trim(name2) & "%'" 
Else
    strName = "LIKE = '%" & Trim(name1) & "%'"
End If
%>
<br>
strName:<%=strName%><p>
<p>
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("phone_numbers.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")

SQL="SELECT * FROM Brunswick" & _
" WHERE " & strCity & " (" & strName & ")" & _ 
" ORDER BY Name ASC;" 

RecSet.Open SQL, Databas, 3, 3             [b]<---- rad 89[/b]

Do until RecSet.EOF
    Response.Write (Recset("name") & "<br>")
    Response.Write (Recset("address"))
    Recset.movenext
Loop
RecSet.Close 
Databas.Close
%>
Medlem sedan dec. 20003 887 inlägg
#10
If Instr(strName, ",") > 0 Then
    strName = "Name LIKE '%" & Trim(name1) & "%' OR Name LIKE '%" & Trim(name2) & "%'" 
Else
    strName = "Name LIKE = '%" & Trim(name1) & "%'"
End If

Syntax error kommer från apostrofen efter AND, men jag förstår inte riktigt hur den har hamnat där...

Medlem sedan juni 200032 967 inlägg
#11

Skriv ut den färdiga SQL-frågan istället, så är det lättare att felsöka.

mvh

Medlem sedan maj 20023 372 inlägg
#12

Hej igen!

Nu hajar jag äntligen hur man skriver ut en körd SQL fråga. *tack* ( med <%=SQL%> )

Såhär ser det ut:

name1:Todd
name2:Sharon
strName:Name LIKE '%Todd%' OR Name LIKE '%Sharon%'

Och så själva SQL frågan:

SELECT * FROM Brunswick WHERE City LIKE '%Brunswick%' AND ' (Name LIKE '%Todd%' OR Name LIKE '%Sharon%') ORDER BY Name ASC;
Medlem sedan juni 200032 967 inlägg
#13
If city = vbNullString Then
    strCity = ""
Else
    strCity = "City LIKE '%" & city & "%' AND '" [b] <--- Ta bort den högraste apostrofen[/b]
End If

Mvh,

Medlem sedan maj 20023 372 inlägg
#14

Tack, då fungerar det äntligen.

Tack Peeer, Engine och @nders för hjälpen!!!!

Medlem sedan maj 20023 372 inlägg
#15

Det ska vara såhär också så att det funkar om strängen är utan komma:

strName = "Name LIKE '%" & Trim(name1) & "%'"

Skriver det för om någon får för sig att använda denna koden i framtiden.

273 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)