Como faço para ler dados de um arquivo xBase / Clipper em VB6?
Pergunta
- arquivo DBF está em
C:\dbase\clip53\PRG\stkmenu\WPACK3\
arquivo - DBF é chamado
WPACKS.CFG
(deliberadamente não .DBF)
O código VB6 em um EXE ActiveX para abrir o banco de dados e de registros:
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
O script acesso a esses métodos parece um pouco com VBScript. É VBScript, mas executados pelo referido ActiveX EXE que usa o controle MSScript e tem uma pilha de objetos que podem tornar disponível para o mecanismo de script. Uma espécie de VBScript-on-esteróides abordagem.
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
O meu problema é que eu continuo recebendo The connection cannot be used to perform this operation. It is either closed or invalid in this context.
quando ele atinge o oRecordSet.open sQuery, , , adCmdText
(que eu tenho de um site da Microsoft.)
'Tis um irritante pouco.
Solução
A seqüência de conexão que eu uso quando eu preciso conectar um arquivo DBF é geralmente algo como:
"Driver={Microsoft dBase Driver (*.dbf)};dbq=<filePath>"
Ele funciona muito bem para mim.
Outras dicas
tente usar o mais recente e maior do driver FoxPro.