borde det inte vara:
SQL="SELECT * FROM Brunswick WHERE City = "&city&" AND Name = "&name&" ORDER BY Name ASC;"
14 svar · 365 visningar · startad av Pellefant
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 %>
borde det inte vara:
SQL="SELECT * FROM Brunswick WHERE City = "&city&" AND Name = "&name&" ORDER BY Name ASC;"
<%
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?
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. :)
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;"
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.
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.
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
%>
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...
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;
If city = vbNullString Then
strCity = ""
Else
strCity = "City LIKE '%" & city & "%' AND '" [b] <--- Ta bort den högraste apostrofen[/b]
End If
Mvh,
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.