2016-09-30 63 views
0

我嘗試過把我的訪問表數據到SQL服務器,但我得到它說帶塊變量VBA代碼傳輸Access表到SQL Server

對象變量或錯誤沒有設置

我已經連接我的Access數據庫與SQL服務器,但現在面臨問題傳輸數據到SQL Server與VBA代碼。

你能幫我嗎?

這裏是我的代碼:

Public Sub ADOtest() 

    Dim ADOConn As New ADODB.Connection 
    Dim ADOCom As New ADODB.Command 


    On Error Resume Next 

    ADOConn.ConnectionString = "Driver={SQL Server};Server=IT-TEMP2-8470P\SQLEXPRESS2014;Database=Discrepancy;Trusted_Connection=True;" 
    ADOConn.Open 

    Debug.Print ADOConn.State 

    Dim db As Database 
    Dim Discrepancy As Database 
    Set db = Discrepancy 
    Dim ID As Variant 

    db.Execute "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=IT-TEMP2-8470P\SQLEXPRESS2014;DATABASE=Discrepancy].SFTransfersDB (ID, TO) SELECT ID,TO FROM SFTransfersDB" 


End Sub 

我得到的錯誤在第二屆最後一行:

db.Execute "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=IT-TEMP2-8470P\SQLEXPRESS2014;DATABASE=Discrepancy].SFTransfersDB (ID, TO) SELECT ID,TO FROM SFTransfersDB" 
+0

'ADOConn.Execute'而不是'db.Execute',但您可能需要ACE或Jet提供程序來使用'[ODBC;'部分 – Slai

+0

您似乎在將ADO與DAO混淆。您的ADO連接字符串已經指定了數據庫,因此不需要單獨的對象。而且,一旦在同一個數據庫中追加查詢就不需要分佈式查詢子句。 – Parfait

回答

1

你聲明瞭兩個數據庫變量,但沒有初始化它們(你不它們設置爲任何東西):

Dim db As Database 
Dim Discrepancy As Database 

所以這

Set db = Discrepancy 

相同

Set db = Nothing 

,所以當您嘗試使用db,你得到的錯誤db沒有設置,它不是。

0

看來你正在嘗試一個特設的分佈式查詢。如果服務器允許,請考慮在ADO連接後執行此語句。無需調用Access對象。

ADOConn.Execute "INSERT INTO dbo.SFTransfersDB ([ID], [TO])" _ 
      " SELECT [ID], [TO] FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', " _ 
      "'Data Source=""C:\Path\To\Access\Database.accdb""')...SFTransfersDB;" 
0

感謝您的建議。

我知道它是正確的。

我用「Set db = CurrentDb」,它工作得很完美。