2014-02-21 8 views
0

Я пытаюсь открыть хранимую процедуру SQL, содержащую таблицу «Выбрать верхнюю 5 * форму», и загрузить данные в таблицу Access Table3. Как установить свойство ActiveSonnection объекта Command для использования текущей базы данных доступа? , когда я предоставляю ему фактическую строку подключения, он говорит, что пользователь заблокировал ее. На данный момент он запускается и печатает, распечатывает результаты, но не вставляет значения. Это тоже не дает мне ошибки.VBA Access, записывающий данные с SQL-сервера в Access DB

'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 и заменить код, в который вы вставляете «CurrentProject.Connection.Execute» Insert ... » –

ответ

0

Нет необходимости писать такое большое количество кода и создавать бедность мира. Сохраните команду execute в качестве прохода через запрос.

Например:

Exec 4 

Предполагая, что выше называется sp1, то этот код будет добавлять все данные из вышеизложенного в локальную таблицу:

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

Так весь этот код может быть сделано с ОДНОЙ строкой кода VBA.