Hej Hej. Joins brukar gå snabbare än att öppna recordset. Eftersom det ofta är anropet till databasen som tar tid. det beror ju lite på.. i en select är ju join det smartaste.. men ska du lägga in flera rader i en tabell på en gång så ser inte jag nån annan lösning än att använda en loop Loop? Vad menar du med loop? Från ett recordset? Eller genom en annan datakälla? Jag tror på att använda joins istället för att skapa nya recordset i loopen. Din kod blir lättare att läsa och du gör ett anrop till databasen istället för flera stycken. Så här ser exemplet ut som jag jobbar med: Är det hur du loopar ut det som du undrar över?RecordSet? - Förvirrad
Jag har i en del inlägg här i forumet läst att man inte ska öppna recordset inne i loopar. Samtidigt har jag i andra inlägg läst att det är bättre att öppna ett nytt RS istället för att använda sig av joins. Någon som kan förklara för mig vilket som gäller. Jag sitter just nu i en sits där jag förmodligen måste öppna både 2 o 3 RS inne i varandra, men jag blir lite förvirrad när jag söker i forumet efter tips. Vilket är bäst?Sv: RecordSet? - Förvirrad
Det här låter lite lustigt i mina öron, öppna ett nytt rs inne i en lopp??
Försök att förklara dig lite närmare, och lite kod.
Att använda sig av flera rs om du istället kan använda dig av joins tycker jag rent sporadiskt låter lite knasigt.
Den hårda läxan som jag har lärt mig, är att gör så mycket som möjligt i en SQL.
En viktig sak som du vinner är bl a att du kan stänga din connections mycket snabbare, och det är ju utav vikt.Sv: RecordSet? - Förvirrad
Om du måste öppna ett recordset i en loop använd då istället MSDataShape. Se inlägg: [ADODB: Command.Prepered]Sv: RecordSet? - Förvirrad
Sv: RecordSet? - Förvirrad
Om man skall skapa/överföra poster från en tabell kan man infoga flera poster med en SQL-sats:
<code>
strSQL = "INSERT INTO Friends (FriendUser, FriendFriend)" & vbCrLf & _
"SELECT " & Session("USerId") & ", UserID" & vbCrLf & _
"FROM Users" & vbCrLf & _
"WHERE UserId IN (12, 23, 45, 67)"
</code>
Om informationen som infogas inte finns. Blir en lop nödvändig.
Med jag tror frågan gäller presentation av data.Sv: RecordSet? - Förvirrad
Sv: RecordSet? - Förvirrad
<code>
strSQL = "SELECT * FROM tblOrter INNER JOIN (tblBiltyp INNER JOIN tblFordon ON tblBiltyp.TypId = tblFordon.TypId) ON tblOrter.OrtId = tblFordon.OrtId" & _
" WHERE tblFordon.TypId=" & TypId & " ORDER BY tblFordon.PVnr asc"</code>
Så långt inga problem. Problemet uppstår när jag blandar in en fjärde tabell som är relaterad till tblFordon.FordonsId, då loopas alla poster ut som finns i den relaterade tabellen och det vill jag inte, men informationen vill jag ha. (Man kan inte både ha kakan o........)
<code>
tblFordon.FordonsID -->> tblKoppling.FordonsId (1 till många)
</code>
Frågan är alltså, hur hanterar jag infon i den relaterade tabellen samtidigt som jag bara loopar ut tblFordon, tblOrter, och tblBiltyp?Sv: RecordSet? - Förvirrad
Du kan ju göra så här:
<code>
Dim rs
Dim con
Dim FordonsId
Set con = Server.CreateObject("ADODB.Connection")
con.Open ">>>Connection String<<<"
strSQL = "SELECT tblFordon.*, tblBiltyp.*, tblOrter.*, tblKoppling.*" & vbCrLf & _
"FROM ((tblFordon LEFT JOIN" & vbCrLf & _
" tblBiltyp ON tblFordon.TypId = tblBiltyp.TypId) LEFT JOIN" & vbCrLf & _
" tblOrter ON tblFordon.OrtId = tblOrter.OrtId) LEFT JOIN" & vbCrLf & _
" tblKoppling ON tblFordon.FordonsID = tblKoppling.FordonsId" & vbCrLf & _
"WHERE tblFordon.TypId = " & TypId & vbCrLf & _
"ORDER BY tblFordon.PVnr ASC"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL
Do Until rs.EOF
If FordonsId <> rs("FordonsId") Then
'tblFordon Loop
FordonsId = rs("FordonsId")
End If
'tblKoppling Loop
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
con.Close
Set con = Nothing
</code>