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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top