Skall man använda RS.Close när man hämtat data med Du ska använda det i båda fallen. Jag bugar och tackar Gör en Join i första frågan och skipa det andra recordsettet. Mycket snabbare. Om du inkluderar hela din kod kanske vi kan hjälpa dig skriva frågan. <br> OK Så här ser koden ut för närvarande. ÄR väldigt svårt att se vad dui försöker åstakomma. Man har gjort lite förändringar som jag tror fungerar: Antal behövs egentligen inte i detta fallet. Jag hade bara klippt och klistrat in en del av koden från ett annat ställe i programmet som i princip gjorde samma sak men där behövde jag veta antalet.. har tatt bort det nu.RS.Close eller inte
Set RS=Conn.Execute(" SQLFråga ") eller bara om man öppnar recordsetet med RS.Open?
RS=Recordset
/KristerSv: RS.Close eller inte
Om det inte är så att Execut metoden inte retunerar något recordset. T.ex: Insert, Update eller Delete fråger. Då får man tillbakse ettt stäng recordset och att anropa Close ger då ett fel.Sv: RS.Close eller inte
En undran bara. Om jag använder det i en loop, måste jag då stänga det och öppna det för varje fråga?
//KristerSv: RS.Close eller inte
Om jag t.ex gör så här
Set RS1=Conn.Execute("SQLFråga")
Do until RS1.EOF
Set RS2=Conn.Execute( SQLFråga med resultat från RS1 )
...
....
.....
RS1.MoveNext
LoopSv: RS.Close eller inte
<br>
Annars föreslår jag att du inte använder Execut eftersom den skapar ett nytt recordset i varje loop. Utan detta är ett tillfälle för Open metoden:
<code>
Set RS1=Conn.Execute("SQLFråga")
Set RS2 = New ADODB.Recordset
Do until RS1.EOF
RS2.Open "SQLFråga med resultat från RS1", conn
'.
'..
'...
RS2.Close
RS1.MoveNext
Loop
</code>Sv: RS.Close eller inte
<code>
Private Sub cmdOrder_Click() '******** Sök på ordernummer
On Error Resume Next
Dim antal As Integer, artikelnr As String
Dim adoOrder As ADODB.Recordset
Dim index As Integer, index2 As Integer
index2 = 0
Set adoOrder = ADOCn.Execute("SELECT ordernr, artserienr, ( SELECT COUNT( * ) FROM Hh WHERE ordernr=" & txtOrdernr & ") AS Antal FROM Hh WHERE ordernr=" & txtOrdernr)
antal = adoOrder.Fields("Antal")
If antal > 0 Then
For index = 1 To antal
artikelnr = Trim(adoOrder!artserienr)
If Len(artikelnr) = 14 Then ' ** KONTROLL OM ATRIKELNUMMRET INNEHÅLLER 14 SIFFROR
Set adoTii = ADOCn.Execute("SELECT artnr, ArtBeskr, ArtBeskrSpec FROM ar where Artnr='" & Left(artikelnr, 5) & "'")
index2 = index2 + 1
ListView1.ListItems.Add index2, , adoTii!artnr
If Not IsNull(adoTii!ArtBeskr) Then
ListView1.ListItems(index2).SubItems(1) = adoTii!ArtBeskr
End If
If Not IsNull(adoTii!ArtBeskrSpec) Then
ListView1.ListItems(index2).SubItems(2) = adoTii!ArtBeskrSpec
End If
ListView1.ListItems(index2).SubItems(3) = artikelnr
ListView1.ListItems(index2).SubItems(4) = Combo2.Text
ListView1.ListItems(index2).Tag = Mid(artikelnr, 6, 6)
If antal >= 1 Then
ListView1.ListItems(index).SmallIcon = 11
End If
End If
adoOrder.MoveNext
Next index
adoTii.Close
Call AntalElement
End If
adoOrder.Close
End Sub
</code>Sv: RS.Close eller inte
<code>
Private Sub cmdOrder_Click() '******** Sök på ordernummer
Dim antal As Long
Dim artikelnr As String
Dim adoOrder As ADODB.Recordset
Dim index As Long
Dim ListItem as ListItem
Dim ListItems as ListItems
On Error Goto cmdOrder_Click_Err
Set ListItems = ListView1.ListItems
Set adoOrder = ADOCn.Execute("SELECT Hh.ordernr, Hh.artserienr, ar.artnr, ar.ArtBeskr, ar.ArtBeskrSpec" & vbCrLf & _
"FROM Hh LEFT JOIN ar ON ar.Artnr=Left(Hh.artikelnr, 5)" & vbCrLf & _
"WHERE Len(artserienr)=14 AND ordernr=" & txtOrdernr)
Do Until adoOrder.EOF
artikelnr = Trim(adoOrder!artserienr)
Set ListItem = ListItems.Add( , , adoTii!artnr)
ListItem.SubItems(1) = "" & adoTii!ArtBeskr
ListItem.SubItems(2) = "" & adoTii!ArtBeskrSpec
ListItem.SubItems(3) = artikelnr
ListItem.SubItems(4) = Combo2.Text
ListItem.Tag = Mid(artikelnr, 6, 6)
If antal >= 1 Then
ListItem.SmallIcon = 11
End If
Call AntalElement
adoOrder.MoveNext
Loop
adoOrder.Close
cmdOrder_Click_Exit:
Exit Sub
cmdOrder_Click_Err:
Msgbox Err.Description
Resume cmdOrder_Click_Exit
End Sub
</code>Sv: RS.Close eller inte
Tack än en gång för hjälpen
//Krister