VBA Access writing data from SQL server to the Access DB

◇◆丶佛笑我妖孽 提交于 2019-12-11 16:24:36

问题


Im trying to open a SQL stored procedure, which contains a Select top 5* form table, and load the data into an Access table called Table3. How do I set the Command Object ActiveConnection property to use the current Access DB? when I provide it with an actual connection string, it says that the user has locked it. At the moment, it runs and prints prints out the results but it does not insert the values. It does not give me an error either.

'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

回答1:


There is no need to write such large amounts of code and create world poverty. Save the execute command as a pass through query.

Eg:

Exec 4

Assuming the above is called sp1, then this code will append all data from the above into the local table:

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

So all of this code can be done with ONE line of VBA code.



来源:https://stackoverflow.com/questions/21922598/vba-access-writing-data-from-sql-server-to-the-access-db

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!