2016-09-30 94 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”,它工作得很完美。