Access DAO nach ADO

Hallo,

ich möchte meine Datenbank von DAO nach ADO umstellen. Dort bin ich beim
Zählen von Datensätzen in einer Tabelle auf ein Problem gestosen. Bei
rs.RecortCount gibt er mir nur -1 aus, wobei er mir bei DAO immer alle
Records gezählt hat. Was mache ich falsch.
Anbei habe ich mal meinen Code mit angefügt:

Private Sub Form_Current()
Dim cn As ADODB.Connection ’ Deklaration der DB-Objektvariale
Connection -Objekt
Dim rs1 As ADODB.Recordset ’ Recordset-Objekt
Dim rs2 As ADODB.Recordset ’ Recordset-Objekt
Dim rs3 As ADODB.Recordset ’ Recordset-Objekt
Dim rs4 As ADODB.Recordset ’ Recordset-Objekt
Dim i As Integer
Dim j As Integer
Dim anz
Dim anz3 As Integer
Dim anz4 As Integer
Dim Offen As Single
Dim Umsatz As Single
Dim gezahlt As Single

Set cn = New ADODB.Connection ’ Instanzierung des Objekts
Set rs1 = New ADODB.Recordset ’ Recordset erstellen
Set rs2 = New ADODB.Recordset ’ Recordset erstellen
Set rs3 = New ADODB.Recordset ’ Recordset erstellen
Set rs4 = New ADODB.Recordset ’ Recordset erstellen
cn.ConnectionString = „DRIVER={MySQL ODBC 3.51
Driver};SERVER=localhost;DATABASE=ALL2002;UID=lke:stuck_out_tongue_winking_eye:WD=lkkl; OPTION=3“

cn.Open
rs1.Open „SELECT * FROM Rabatte“, cn, adOpenDynamic, adLockReadOnly ’ Jetzt
kann es losgehen…, z.B. eine Abfrage erstellen…
rs2.Open „SELECT * FROM Kunden_Stammdaten“, cn, adOpenDynamic,
adLockOptimistic ’ Jetzt kann es losgehen…, z.B. eine Abfrage
erstellen…
rs3.Open „SELECT * FROM OP_Verwaltung“, cn, adOpenDynamic, adLockOptimistic
’ Jetzt kann es losgehen…, z.B. eine Abfrage erstellen…
rs4.Open „SELECT * FROM OP_Verwaltung_Details“, cn, adOpenDynamic,
adLockOptimistic ’ Jetzt kann es losgehen…, z.B. eine Abfrage
erstellen…

Rem rs3.MoveLast
Rem anz3 = rs3.RecordCount
Rem rs3.MoveFirst

Rem rs4.MoveLast
Rem anz4 = rs4.RecordCount
Rem rs4.MoveFirst

Rem If Not rs2.RecordCount = 0 Then
rs2.MoveLast
anz = rs2.RecordCount 'hier sollten die Datensätze gezählt
werden. Es wird aber nur -1 ausgegeben!!!
Rem Forms![Kunden Stammdaten]![Kundenanzahl] = anz
Rem anz = „Select COUNT(*) from Kunden_Stammdaten“
Rem Else
Rem anz = 0
Rem End If
Forms![Kunden Stammdaten]![Kundenanzahl] = anz

If Not IsNull([RID]) Then
rs1.MoveFirst
Rem rs1.Find
rs1.Find „[RID]=“ & Forms![Kunden Stammdaten].Rabattstaffel, ,
adSearchForward
Me.Rabatt = rs1(„Rabatt“)
Else
Me.Rabatt = „“
End If

For j = 1 To anz4
If rs3(„OPID“) = rs4(„OPID“) Then
If gezahlt = 0 Then
gezahlt = rs4(„Betrag“)
Else
gezahlt = gezahlt + rs4(„betrag“)
End If
End If
rs4.MoveNext
Next j

For i = 1 To anz3
If rs3(„Kunden-Nr“) = Me.[Kunden-Nr] Then
If Umsatz = 0 Then
Umsatz = rs3(„Betrag“)
Else
Umsatz = Umsatz + rs3(„betrag“)
End If
End If
rs3.MoveNext
Next i

Me.Umsätze = Umsatz
Me.Offen = Umsatz - gezahlt

End Sub

Vielen Dank für Eure Mühe.

Mit freundlichen Grüßen

Matthias Köstler

Hallo Mathias,

dein code ist mir zu hoch, aber ich glaube gelesen zu haben, man muß bei ado erst zum letzten datensatz gehen ( stand in einem Buch über VB vom Kofler - sehr zu empfehlen ), dann kommt die richtige Anzahl.
Such mal in der Hilfe in dieser Richtung

Gruß Kurt

Kurt hat völlig recht. Das Problem ist typisch für Access, manchmal geht es, manchmal nicht.
Ich schreibe immer:
rs.movelast
rs.movefirst
und dann „counten“, dann funzt es.

Gruß
Dylan