VB6/MS-WinNT: ADO-Provider funktioniert nur fast

Hallo MS Visual Basic Kenner,

wieso kann ich einen ADO(ActiveX Data Object)-Provider, den ich in der Registry eingetragen habe, NICHT mit

 Dim rs As New Recordset
 rs.Open "select controls from " & \_
 App.Path & "\frmSelect.frm", \_
 "Provider=VB Custom Data;"

ansprechen?
(Der Vollständigkeit halber hier die Fehlermeldung: „Runtime error … 800004005 (=E_FAIL) unspecified error“.)

Die Programmzeilen stammen aus dem Artikel „Do-It-Yourself RecordSets“ in der MSDN-Library Juli '99. Warscheinlich war dieser Artikel aber auch schon im füheren Versionen der MSDN-Library enthalten.

Die Anwendung und die zugrundliegende .dll übersetzt MS Visual Basic 6.0 fehlerfrei. Dazu habe ich folgende Referencen aktiviert.
In der Anwendung:

  • Microsoft Data Adapter Library
  • Microsoft ActiveX Data Objects Recordset 2.0 Library
  • CustomData (die zugrunde liegende .dll)

In der zugrundliegenden .dll:

  • Microsoft OLE DB Simple Provider 1.5 Library.

Die Einträge in der Registry habe ich, wie im Artikel beschrieben durchgeführt. Sie sind so auch in der Registry angekommen.

Das ist (wie zu vermuten war) meine erste ADO-Anwendung. Bisher habe ich meine Datenbank-Zugriffe immer selbst ausprogrammiert.

Mit hilfesuchenden Grüssen

Martin L. Völker

was willst Du damit machen? ich werde ab Deinem Code nicht schlau???

gruss, Giuseppe

Hallo Guiseppe, hallo Programmier-Interessierte,

was willst Du damit machen?

Zum einen möchte ich allegemein lernen, wie ich einen OLE DB Simple Provider (OSP) über ein ActiveX Data Object (ADO) direkt mit Visual Basic anspreche (also nicht nur als Datasouce für ein Datagrid).
Zum anderen brauche ich eine SQL-Schnittstelle, die eine Datenbank öffnet, abfragt und sofort wieder schliesst, danach aber den RecordSet noch zur Verfügung stellt. Dazu wollte ich einen (meinen ersten) OSP schreiben.

Mit Visual Basic freudigen Grüssen

Martin

Hallo Martin

Hier eine Lösung von vielen:

Mache eine ODBC Quelle auf eine Datenbank (z.b. Access oder SQL Server) und nenne
die ODBC Quelle ADOTest

mache dann im VB eine Sub

sub RSmitAdo

dim m_RS as adodb.recordset
dim m_strSQL as string
dim m_strDSN as string

m_strSQL = „Select * from MyTable“
m_strDSN = „DSN=AdoTest;“ 'der name der ODBC Quelle
set m_rs = new adodb.recordset

m_rs.open m_strSQL,m_strDSN,adopenforwardonly

do until m_rs.eof
listbox1.additem m_Rs(„MyField“)
m_rs.movenext
loop

m_rs.close
set m_rs = nothing

end sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]