Hej, Prova att istället för butikschef=ja skriva butikschef=-1 Hej Peter, Att använda JA i butikschef=JA är inte rätt. -1 ger TRUE och 0 ger FALSE. Hej Andreas, Det är det det finns dokumentation för. :oP Okej! Hej, Det är troligt att du stavat fel på ett kolumnnamn. Var vänlig att kontrolera dessa mot din databas. Hej, Hej (Andreas), Var stänger du recordsetet? I min kod sker detta efter itereringen över posterna eftersom recordsetet då inte längre behövs. Om det handlar om att göra en Do Until rs.EOF så stänger jag det efter rs.MoveNext : Loop!Sql-fråga till två databas-tabeller
Jag vill hämta ut en adress och person ur två olika tabeller men får inte Sql-frågan rätt.
Vänt och vridit på Sql-n men är inte överrens med tekniken...
butik = Tabell 1
butik_ID = fält
ort = fält
personal = Tabell 2
butik_ID = fält
fornamn = fält
efternamn = fält
butikschef = fält(ja/nej)
Sql_n
Dim ort
ort = Request.QueryString("ort")
If ort <> "" Then
Set rs = Conn.Execute("SELECT butiker.butik_ID, butiker.telefon, personal.fornamn, personal.efternamn FROM butiker, personal WHERE butiker.ort='"& ort &"' AND personal.butikschef=JA")
'butik = rs("butik_ID")
'Set rs2 = Conn.Execute("SELECT fornamn, efternamn FROM personal WHERE butikschef=ja AND butik_ID='"& butik &"'")
Do Until rs.EOF 'AND rs2.EOF
Response.Write " "& rs("telefon") &" <br>"
Response.Write " "& rs("butik_ID") &" <br>"
Response.Write " "& rs("fornamn") &" <br><br>"
'Response.Write rs2("fornamn")<br><br>
rs.MoveNext
'rs2.MoveNext
Loop
rs.Close
Set rs = Nothing
'rs2.Close
'Set rs2 = Nothing
End If
Får fram varje butik och dess ID men det är när jag ska hämta butikschefen till varje butik som det blir problem.
Får " No value given for one or more required parameters"
Någon som har en annan ide hur man kan hämta värden ur personal-tabellen som motsvarar butiken ur butik-tabellen?
Micke
Sv: Sql-fråga till två databas-tabeller
Sv:Sql-fråga till två databas-tabeller
Testade istället med:
<%
Dim ort
ort = Request.QueryString("ort")
If ort <> "" Then
Set rs = Conn.Execute("SELECT butik_ID, telefon FROM butiker WHERE ort='"& ort &"'")
Do Until rs.EOF
Dim butik
butik = rs("butik_ID")
Set rs_person = Conn.Execute("SELECT butik_ID, fornamn, efternamn FROM personal WHERE butik_ID='"& butik &"' AND butikschef=JA")
Response.Write " "& rs("telefon") &" <br>"
Response.Write " "& rs("butik_ID") &" <br>"
Response.Write " "& rs_person("fornamn") &" <br><br>"
rs_person.Close
Set rs_person = Nothing
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End If
%>
Är det ett bättre sätt? Fick det dock inte att fungera men är det mer rätt rent tekniskt ang Asp/Sql?
Fick meddelande: Data type mismatch in criteria expression.
Micke
Sv: Sql-fråga till två databas-tabeller
<%
Dim ort
Dim strSQL
ort = Request.QueryString("ort")
If ort <> "" Then
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "SELECT butiker.butik_ID, butiker.telefon, personal.fornamn, personal.efternamn" & vbCrLf & _
"FROM personal INNER JOIN butiker ON personal.butik_ID = butiker.butik_ID" & vbCrLf & _
"WHERE butiker.ort = @ort AND personal.butikschef = True"
Set rs = cmd.Execute(, Array(ort))
Do Until rs.EOF
Response.Write " "& rs("telefon") & " <br>"
Response.Write " "& rs("butik_ID") & " <br>"
Response.Write " "& rs("fornamn") & " <br><br>"
'Response.Write rs2("fornamn")<br><br>
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End If
%>
Sv: Sql-fråga till två databas-tabeller
Sv:Sql-fråga till två databas-tabeller
Det fungerade Kanon!
Orkar du berätta mer om:
1. cmd.ActiveConnection
2. cmd.CommandText
3. Set rs = cmd.Execute(, Array(ort))
4. & vbCrLf & "FROM personal INNER JOIN butiker ON personal.butik_ID = butiker.butik_ID" & vbCrLf & _
"WHERE butiker.ort = @ort
Annars Stort tack!
MickeSv: Sql-fråga till två databas-tabeller
Men koden skyddar mot SQL injection. Vilket din kod var sårbar för.
Commandobjektet används för att köra frågor, anropa stored procedure, osv.Sv:Sql-fråga till två databas-tabeller
Får kolla upp mer då tid ges...
Tack iallafall!
MickeSv: Sql-fråga till två databas-tabeller
Försökte få till Sql-frågan så att den hämtade ur tre tabeller!
"SELECT butiker.butik_ID, butiker.butik, butiker.gatuadress, butiker.postnummer, butiker.ort, butiker.telefon, personal.fornamn, personal.efternamn, oppettider.man_fre" & vbCrLf & "_
FROM (personal INNER JOIN butiker ON personal.butik_ID = butiker.butik_ID)_
INNER JOIN oppettider ON oppettider.butik_ID = butiker.butik_ID" & vbCrLf & "_
WHERE butiker.ort = @ort AND personal.butikschef = True"
Det som är tilllagt är hämtningen av oppettider.man_fre samt då en till inner join
Får: No value given for one or more required parameters.
Set rs = cmd.Execute(, Array(ort)) // pekar på denna rad (såklart)
Misstänker att det är oppettider som Inte stämmer eller...
Micke
Sv:Sql-fråga till två databas-tabeller
Jag skulle radbryta frågan på följande sätt:
strSQL = "SELECT butiker.butik_ID, butiker.butik, butiker.gatuadress, butiker.postnummer, butiker.ort, butiker.telefon, personal.fornamn, personal.efternamn, oppettider.man_fre" & vbCrLf & _
"FROM (personal INNER JOIN" & vbCrLf & _
" butiker ON personal.butik_ID = butiker.butik_ID) INNER JOIN " & vbCrLf & _
" oppettider ON oppettider.butik_ID = butiker.butik_ID" & vbCrLf & _
"WHERE butiker.ort = @ort AND personal.butikschef = True" & vbCrLf
Sv: Sql-fråga till två databas-tabeller
Det är ordnat!
Det var så "dumt" att jag hade ändrat fältnamnet i tabellen men Inte uppdaterat db på servern :)
Så fältet jag tittade på var den jag ändrat lokalt...
Stort Tack, faktiskt lärt mig nått nytt genom detta inlägget :)
MickeSv:Sql-fråga till två databas-tabeller
Fått (Du gav mig) ett förslag på en Sql-sträng innehållande detta:
Dim cmd
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = Conn
cmd.CommandText = "tjolahopp"
Set rs = cmd.Execute
Men då jag skulle "stänga" rs-et med rs.Close så kunde den inte köra Sql-n för den var stängd även om stängningen kom Efter körningen, behöver man inte stänga varken rs-et eller Conn-et då man kodar på detta sätt?
Micke
Sv: Sql-fråga till två databas-tabeller
Jag har sett folk göra inkludfiler där det uppnar recordset i huvedet och stänger det i foten. Detta är dålig programmering och borde bestraffas med spöstraff.Sv:Sql-fråga till två databas-tabeller
Annars om det handlar om Insert eller Uppdate så stänger jag det efter körningen och Så klart Innan Redirect :)
Fungerar det på samma sätt om man använder Command istället för Set rs = Conn.Execute?
Micke