VB6 - Access - OpenDynamic

12/10/2014 - 13:20 von Lothar Geyer | Report spam
Ich habe diesen Typ von Recordset bisher nicht benutzt und wollte das
jetzt mal testen. Aufgabe: Programm A schreibt einen Datensatz in eine
Tabelle, Programm B meldet: da ist ein neuer Datensatz. Aber ich kriege
das nicht zum Laufen. Programm A làuft natürlich, Programm B auch,
erhàlt aber keine Events.

Source of B

Option Explicit

Private cnn As Connection
Private WithEvents rsb As ADODB.Recordset

Private Sub Form_Load()
Dim sql As String

' connection erstellen
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = "TestDynamic.mdb"
.CursorLocation = adUseClient
.Open
End With

sql = "Select * From Tabelle1"
Set rsb = New Recordset
rsb.Open sql, cnn, adOpenDynamic, adLockOptimistic

lblAktAnzahl = "Anzahl im RS: " & rsb.RecordCount

End Sub

Private Sub rsb_RecordsetChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

lblEventNeu.Visible = True
timTimer.Enabled = True
lblAktAnzahl = rsb.RecordCount

End Sub

Private Sub rsb_WillChangeRecordset(ByVal adReason As
ADODB.EventReasonEnum, adStatus As ADODB.EventStatusEnum, ByVal
pRecordset As ADODB.Recordset)

lblEventNeu.Visible = True
timTimer.Enabled = True
lblAktAnzahl = rsb.RecordCount

End Sub

Private Sub timTimer_Timer()
lblEventNeu.Visible = False
timTimer.Enabled = False
End Sub


Und nun die übliche Frage: was mache ich falsch?

Lothar Geyer
 

Lesen sie die antworten

#1 Ulrich Möller
12/10/2014 - 14:14 | Warnen spam
Am 12.10.2014 um 13:20 schrieb Lothar Geyer:
Ich habe diesen Typ von Recordset bisher nicht benutzt und wollte das
jetzt mal testen. Aufgabe: Programm A schreibt einen Datensatz in eine
Tabelle, Programm B meldet: da ist ein neuer Datensatz. Aber ich
kriege das nicht zum Laufen. Programm A làuft natürlich, Programm B
auch, erhàlt aber keine Events.

Source of B

Option Explicit

Private cnn As Connection
Private WithEvents rsb As ADODB.Recordset

Private Sub Form_Load()
Dim sql As String

' connection erstellen
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = "TestDynamic.mdb"
.CursorLocation = adUseClient
.Open
End With

sql = "Select * From Tabelle1"
Set rsb = New Recordset
rsb.Open sql, cnn, adOpenDynamic, adLockOptimistic

lblAktAnzahl = "Anzahl im RS: " & rsb.RecordCount

End Sub

Private Sub rsb_RecordsetChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

lblEventNeu.Visible = True
timTimer.Enabled = True
lblAktAnzahl = rsb.RecordCount

End Sub

Private Sub rsb_WillChangeRecordset(ByVal adReason As
ADODB.EventReasonEnum, adStatus As ADODB.EventStatusEnum, ByVal
pRecordset As ADODB.Recordset)

lblEventNeu.Visible = True
timTimer.Enabled = True
lblAktAnzahl = rsb.RecordCount

End Sub

Private Sub timTimer_Timer()
lblEventNeu.Visible = False
timTimer.Enabled = False
End Sub


Und nun die übliche Frage: was mache ich falsch?

Lothar Geyer



Hallo Lothar,

die Events beziehen sich doch nur auf das jeweilige Recordset. Warum
sollte also rstA etwas von rstB wissen?
Um Änderungen an der DB zwischen Prozessen zu synchronisieren, muß im
entsprechenden Recordset die Methode resync aufrufen werden (siehe
Microsoft Data Access SDK).
In "richtigen" DBs gibt es hierfür spezielle Mechanismen, die einen
Prozess automatisch über Änderungen informieren könnten. Bei Access MDBs
bleibt die nur Polling über.

Ulrich

Ähnliche fragen