Sql-fråga till två databas-tabeller
Hej,
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
Svara
Sv: Sql-fråga till två databas-tabeller
Prova att istället för butikschef=ja skriva butikschef=-1
Svara
Sv:Sql-fråga till två databas-tabeller
Hej Peter,
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
Svara
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 %>
Svara
Sv: Sql-fråga till två databas-tabeller
Att använda JA i butikschef=JA är inte rätt. -1 ger TRUE och 0 ger FALSE.
Svara
Sv:Sql-fråga till två databas-tabeller
Hej Andreas,
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!
Micke
Svara
Sv: Sql-fråga till två databas-tabeller
Det är det det finns dokumentation för. :oP
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.
Svara
Sv:Sql-fråga till två databas-tabeller
Okej!
Får kolla upp mer då tid ges...
Tack iallafall!
Micke
Svara
Sv: Sql-fråga till två databas-tabeller
Hej,
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
Svara
Sv:Sql-fråga till två databas-tabeller
Det är troligt att du stavat fel på ett kolumnnamn. Var vänlig att kontrolera dessa mot din databas.
Jag skulle radbryta frågan på följande sätt:
1 2 3 4 5 | 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 |
Svara
Sv: Sql-fråga till två databas-tabeller
Hej,
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 :)
Micke
Svara
Sv:Sql-fråga till två databas-tabeller
Hej (Andreas),
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
Svara
Sv: Sql-fråga till två databas-tabeller
Var stänger du recordsetet? I min kod sker detta efter itereringen över posterna eftersom recordsetet då inte längre behövs.
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.
Svara
Sv:Sql-fråga till två databas-tabeller
Om det handlar om att göra en Do Until rs.EOF så stänger jag det efter rs.MoveNext : Loop!
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
Svara