Как мне прочитать данные из файла xBase / Clipper в VB6? - PullRequest
0 голосов
/ 18 июня 2009
  • Файл DBF находится в C:\dbase\clip53\PRG\stkmenu\WPACK3\
  • Файл DBF называется WPACKS.CFG (намеренно нет .DBF)

Код VB6 в ActiveX EXE для открытия базы данных и набора записей:

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

Скрипт, обращающийся к этим методам, немного похож на VBScript. Это VBScript, но исполняемый вышеупомянутым ActiveX EXE, который использует элемент управления MSScript и имеет целую кучу объектов, которые он может сделать доступными для механизма сценариев. Некий подход VBScript-на-стероидах.

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

Моя проблема в том, что я продолжаю получать The connection cannot be used to perform this operation. It is either closed or invalid in this context., когда он достигает oRecordSet.open sQuery, , , adCmdText (который я получил с сайта Microsoft.)

'Это немного раздражает.

Ответы [ 2 ]

3 голосов
/ 18 июня 2009

Строка подключения, которую я использую, когда мне нужно подключить файл DBF, обычно выглядит примерно так:

"Driver={Microsoft dBase Driver (*.dbf)};dbq=<filePath>"

У меня отлично работает.

1 голос
/ 18 июня 2009

попробуйте использовать самый последний и лучший драйвер FoxPro.

...