Wie lese ich Daten aus einer xBase / Clipper-Datei in VB6?
Frage
- DBF-Datei ist in
C:\dbase\clip53\PRG\stkmenu\WPACK3\
- DBF-Datei wird
WPACKS.CFG
genannt (absichtlich nicht DBF)
Der VB6-Code in einer ActiveX-EXE für die Datenbank und die Datensatzgruppe zu öffnen:
Function OpenDatabase(sFile As Variant, Optional sProvider As Variant = "Provider=Microsoft.Jet.OLEDB.4.0") As Variant ' ADODB.Connection
Dim nErr As Long
Dim sErr As String
Dim oConnection As Object 'ADODB.Connection
Set oConnection = CreateObject("ADODB.Connection")
On Error Resume Next
oConnection.open sProvider & ";Data Source=" & sFile
nErr = Err.Number
sErr = Err.Description
On Error GoTo 0
If nErr <> 0 Then
Err.Raise OPENDATABASE_E_NOTFOUND, , sErr
End If
Set OpenDatabase = oConnection
End Function
Function OpenRecordSet(ByRef oDb As Variant, sQuery As Variant, Optional bCmdText As Boolean = False) As Variant ''ADODB.Connection ADODB.Recordset
Const adOpenForwardOnly As Long = 0
Const adOpenStatic As Long = 3
Const adOpenDynamic As Long = 2
Const adOpenKeyset As Long = 1
Const adLockOptimistic As Long = 3
Const adCmdText As Long = 1
Dim oRecordSet As Object 'ADODB.Recordset
Set oRecordSet = CreateObject("ADODB.RecordSet")
If bCmdText Then
oRecordSet.open sQuery, , , adCmdText
Else
oRecordSet.open sQuery, oDb, adOpenKeyset, adLockOptimistic
End If
Set OpenRecordSet = oRecordSet
End Function
Das Skript diese Methoden zugreifen sieht ein wenig wie VBScript. Es ist VBScript, aber durch die zuvor genannte ActiveX EXE ausgeführt, die MSScript Steuerelement verwendet und hat einen ganzen Stapel von Objekten, die sie zur Verfügung, das Script-Engine machen können. Eine Art von VBScript-on-Steroiden Ansatz.
uses database
uses system
dim db
dim rs
set db = database.opendatabase("C:\dbase\clip53\PRG\stkmenu\WPACK3\","Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase III;User ID=Admin;Password=")
set rs = database.openrecordset(db, "SELECT * FROM WPACKS.CFG",true)
system.consolewriteline rs.recordcount
Mein Problem ist, dass ich erhalte immer The connection cannot be used to perform this operation. It is either closed or invalid in this context.
, wenn es die oRecordSet.open sQuery, , , adCmdText
trifft (die ich von einer Microsoft-Website einsehen.)
'Tis ein bisschen irritierend.
Lösung
Die Verbindungszeichenfolge ich benutze, wenn ich brauche eine DBF-Datei zu verbinden ist in der Regel etwas wie:
"Driver={Microsoft dBase Driver (*.dbf)};dbq=<filePath>"
Es funktioniert gut für mich.
Andere Tipps
versuchen, den neuesten und besten FoxPro-Treiber verwendet.