Как записать данные с сервера SQL в таблицу MS Access, используя гибридные соединения - PullRequest
0 голосов
/ 19 февраля 2020

Мне нужно получить данные с сервера SQL, используя запрос, где их оператор хранится в таблице доступа MS, и выгрузить данные в другую таблицу.

Есть 2 таблицы: 01-MyStoredSQLs и 02-tmpTableData

Проблема в том, что есть также 2 соединения. Вот почему я назвал это Hybrid.

Мой окончательный результат - данные с SQL Сервера в tmpTableData (результат запроса, где его оператор хранится в таблице MyStoredSQLs)

Public Sub DumpSQLServerData()
Dim conn As ADODB.Connection
On Error GoTo errMSG

Set conn = New ADODB.Connection

conn.ConnectionString = "DSN=myDSN; UID=MyID;Pwd=MyPWd"
conn.Open

Dim db As DAO.Database
Set db = CurrentDb


Dim rs As DAO.Recordset
'Retrieving the SQL Statment that is stored in the MyStoredSQLs table
Set rs = db.OpenRecordset("SELECT [Statement] FROM MyStoredSQLs WHERE ID=1")
Dim tmpSQL As String
Dim tmpINTOSQL As String


tmpSQL = rs(0)
'Hybrid statement 
tmpINTOSQL = "INSERT INTO tmpTableData" & tmpSQL

conn.Execute (tmpINTOSQL), dbFailOnError

conn.Close
rs.Close
db.Close

Set conn = Nothing
Set rs = Nothing
Set db = Nothing
errMSG:
    Debug.Print Err.Description   
End Sub

1 Ответ

0 голосов
/ 19 февраля 2020

Вы не можете ожидать, что SQL сервер сможет волшебным образом получить доступ к таблицам, хранящимся в другом месте.

Выполните запрос в Access и либо используйте связанную таблицу, либо укажите местоположение таблицы, например

INSERT INTO tmpTableData SELECT Something FROM [ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd].Schema.TableInSQLServer

Если вы хотите выполнить запрос на SQL сервере, а не Microsoft Access, то SQL сервер должен иметь возможность доступа к файлу базы данных Access и использовать OPENROWSET для запроса Таблица доступа.

В качестве альтернативы вы можете создать промежуточный запрос и использовать его для копирования таблицы:

Dim qd As DAO.QueryDef
Set qd = db.CreateQueryDef("~tmpQuery")
qd.Connect = "ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd"
qd.ReturnsRecords = True
qd.SQL = tmpSQL
Set qd = Nothing
db.Execute "INSERT INTO tmpTable SELECT * FROM [~tmpQuery]"
db.QueryDefs.Delete "~tmpQuery"
...