DAO.Recordset über RC5/cThreadHandler

14/08/2014 - 14:54 von Wolfgang Wolf | Report spam
Hallo,

hier arbeiten Leute mit dem RC5. Vielleicht kann mir jemand einen Tipp
geben:

Habe versucht ein DAO.Recordset asynchron zu erzeugen. Hier mein Code:

In der DLL:
Public Function GetRecordset(sql As String) As DAO.Recordset
On Error GoTo E_GetRecordset
MsgBox sql 'wird ausgeführt
Set cnnMain = wrkMain.OpenConnection(ODBC_NAME,
DAO.dbDriverNoPrompt, True)
Set rsMain = cnnMain.OpenRecordset(sql, dbOpenSnapshot)
Set GetRecordset = rsMain
Exit Function
E_GetRecordset:
Err.Raise vbObjectError, "DB", DBEngine.Errors(0).Description
DbClose
End Function

In der Exe:
mTH.CallAsync "GetRecordset", sql

und

Private Sub mTH_MethodFinished(…)
Dim rs As DAO.Recordset
If Len(ErrString) Then
Debug.Print "TH-"; MethodName, ErrString, ErrSource, ErrNumber
Exit Sub
End If

Select Case LCase$(MethodName)
Case LCase$("GetVRecordset")
Set rs = Result
Do Until rs.EOF
Debug.Print rs.fields(1).value
rs.MoveNext
Loop
End Select
rs.Close
mTH.CallSynchronous "DbClose"
End Sub

Das DAO-Recordset bekomme ich so nicht geliefert. Liegt das in der Natur
der Sache oder mache ich was falsch? Interessant: ein falscher SQL
erzeugt einen Fehler. Dieser Fehler ruft MethodFinished auf, ein
Recordset wird bei korrekten SQL nicht geliefert. Muss ich dafür ADO mit
einem verbindungslosen RS verwenden? Oder das DAO.Recordset in der DLL
in ein RC5-cRecordset umschaufeln?

Gruß
W. Wolf
 

Lesen sie die antworten

#1 Schmidt
14/08/2014 - 20:18 | Warnen spam
Am 14.08.2014 um 14:54 schrieb Wolfgang Wolf:

hier arbeiten Leute mit dem RC5. Vielleicht kann mir jemand einen Tipp
geben:

Habe versucht ein DAO.Recordset asynchron zu erzeugen. Hier mein Code:
...
...
Das DAO-Recordset bekomme ich so nicht geliefert. Liegt das in der Natur
der Sache oder mache ich was falsch? Interessant: ein falscher SQL
erzeugt einen Fehler. Dieser Fehler ruft MethodFinished auf, ein
Recordset wird bei korrekten SQL nicht geliefert. Muss ich dafür ADO mit
einem verbindungslosen RS verwenden? Oder das DAO.Recordset in der DLL
in ein RC5-cRecordset umschaufeln?



Beides ginge - wobei das Arbeiten gegen JET (gleich mittels ADO)
wahrscheinlich am direktesten (einfachsten) wàre.

Hintergrund ist, dass die RC5-Thread-Kommunikation Daten (aus
Parametern und Rückgabewerten) generell nur serialisiert transportiert
(in die unterschiedlichen STAs).

Das heisst, dass nur einfache Datentypen und deren Arrays als
Parameter zulàssig sind...

Objekt-Parameter oder -Rückgaben werden nur dann automatisch
serialisiert, wenn sie das IPersistStream-Interface implementieren.

ADO-Recordsets, RC5-cRecordsets, stdOle.StdPicture usw. haben dies
eingebaut und sind als Objekt-Parameter somit zulàssig.

DAO-Recordsets können IPersistStream nicht - müssten also von
Hand serialisiert werden (z.B. in ein String- oder VariantArray)...
z.B. böte sich die DAO Rs.GetRows Methode dafür an.

Olaf

Ähnliche fragen