2014-02-21 112 views
0

我试图打开一个SQL存储过程,它包含一个Select top 5 * form表格,并将数据加载到名为Table3的Access表中。 如何将Command对象的ActiveConnection属性设置为使用当前的Access数据库? 当我给它提供一个实际的连接字符串时,它说用户已经锁定它。 目前,它运行并打印输出结果,但不插入值。它也不给我一个错误。VBA将数据从SQL服务器写入Access数据库

'Use this code to run the SP and extract all the records 
Public Sub ExecuteSPAsMethod2() 
Dim rsData As ADODB.Recordset 
Dim sConnectSQL As String 'to create connection to SQL Server 
Dim sConnectAccess As String 'to create connection with Access DB (may not be neccessary) 
Dim objCommand As ADODB.Command 'for INSERT results of SP into Access table 


'Creating the connection string to SQL server 
sConnectSQL = "Provider=SQLOLEDB;Data Source=MYSERVER; " & _ 
"Initial Catalog=SQLDatabase;Integrated Security=SSPI" 

'Creating the Connection object and Recordset object 
Set objConn = New ADODB.Connection 
Set rsData = New ADODB.Recordset 

'Opening the connection 
objConn.Open sConnectSQL 
'Execute the SP and give the results to the Recordset 
objConn.SurveyDataSP "4", rsData 

Do While Not rsData.EOF 
Debug.Print rsData!Stratum 
rsData.MoveNext 
Loop 

'Now write the data into Access Table 
'Create connection string to Access DB table 
'sConnectAccess = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
       "Data Source=C:\Databse1.accdb;" & _ 
       "Mode = Share Exclusive" 

'Command object to be used for Access SQL query 
Set objCommand = New ADODB.Command 
'objCommand.ActiveConnection = sConnectAccess 

'Insert new record in the DB 
'Load the SQL string into the command object 
Do While Not rsData.EOF 
objCommand.CommandText = "INSERT INTO table3 (" & rsData!Stratum & ")" 
objCommand.Execute 
rsData.MoveNext 
Loop 


End Sub 
+0

http://msdn.microsoft.com/en-us/library/office/aa164887(v=office.10).aspx –

+0

不确定,但可能是您打开Access数据库的方式有问题。如何评论所有Access的连接材料,并用“CurrentProject.Connection.Execute”插入替换代码插入....“ –

回答

0

无需编写如此大量的代码并创建世界贫困。将执行命令保存为传递查询。

如:

Exec 4 

假设上述被称为SP1,那么这段代码将追加从上面的所有数据到本地表:

CurrentDb.Execute "INSERT INTO sp1Local select sp1.* from sp1" 

所以所有这些代码都可以做到用一行VBA代码。

相关问题