2013-12-12 166 views
1

即時通訊工具全新的東西。我編寫了一個代碼,用於計算與此特定數據庫一起使用的列。但不知何故,我得到了如下錯誤:VBA Excel ADODB計數字段

運行時錯誤「-2147217900(80040E14)」:語法錯誤

我試過幾種方法來讀取這些列,但是我不能得到這個工作。有人可以給我一個線索如何解決這個問題嗎?感謝提前:)

Public Function GetParameterDbfTotalColumn() As Long 

Dim sConnectionString As String 
Dim mdbConn As ADODB.Connection 
Dim mrst As ADODB.Recordset 
Dim pPath As String 
Dim sTable As String 

GetParameterDbfTotalColumn = -1 

pPath = "C:\ProgramData\Citect\CitectSCADA 7.20\User\Huisman V4\parameters.dbf" 

Set mdbConn = New ADODB.Connection 
    sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pPath & ";Extended Properties=""DBASE IV;"";" 
    sConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" & pPath & ";Extended Properties=""DBASE IV;"";DriverId=533;CollatingSequence=ASCII;Deleted=0;FIL=dBase 5.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UserCommitSync=Yes;" 
    sConnectionString = "Provider=VfpOleDB.1;Data Source=" & pPath & ";Collating Sequence=MACHINE;Exclusive=ON" 
    mdbConn.Open sConnectionString 

    Set mrst = New ADODB.Recordset 
    mrst.Open sTable, mdbConn, adOpenDynamic, adLockPessimistic, adCmdTable 

    GetParameterDbfTotalColumn = mrst.Fields.Count 

GetParameterDbfTotalColumn = 0 

    Exit Function 

End Function 
+0

在我看來你的連接字符串有問題。檢查[這裏](https://www.connectionstrings.com/dbf-foxpro/) –

+0

順便說一下,'.Open'方法只傳遞'sConnectionString'的最後一個值。可能你錯過了應該以這種方式完成的其他部分的連接:'sConnectionString = sConnectionString&「提供程序......」' –

+0

啊好吧,謝謝我會玩一下:) – user2868444

回答

1

sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pPath & ";Extended Properties=""DBASE IV;"";" 
sConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" & pPath & ";Extended Properties=""DBASE IV;"";DriverId=533;CollatingSequence=ASCII;Deleted=0;FIL=dBase 5.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UserCommitSync=Yes;" 
sConnectionString = "Provider=VfpOleDB.1;Data Source=" & pPath & ";Collating Sequence=MACHINE;Exclusive=ON" 
到底

僅是第三行,以便您sConnection字符串實際上只是

"Provider=VfpOleDB.1;Data Source=" & pPath & ";Collating Sequence=MACHINE;Exclusive=ON" 

你必須不斷添加位(級聯)到您的連接字符串即

sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pPath & ";Extended Properties=""DBASE IV;"";" 
sConnectionString = sConnectionString & "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" & pPath & ";Extended Properties=""DBASE IV;"";DriverId=533;CollatingSequence=ASCII;Deleted=0;FIL=dBase 5.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UserCommitSync=Yes;" 
sConnectionString = sConnectionString & "Provider=VfpOleDB.1;Data Source=" & pPath & ";Collating Sequence=MACHINE;Exclusive=ON" 
+0

好的,謝謝我會嘗試你是對的! – user2868444

+1

它的工作原理!感謝您的幫助:)!我的問題只是與ConnectionString。 – user2868444

+1

+ 1 Nice Catch :) –