Наименьшее количество кода, которое я могу придумать, - это использовать сквозной запрос.
Настройка запроса PT для рассматриваемой базы данных сервера.
Тогда ваш код для создания новой таблицы в доступе будет выглядеть так:
Sub TestImport()
Dim strSQL As String
With CurrentDb.QueryDefs("qryPassR")
.SQL = "select * from tblHotels"
End With
Dim strLocalTable As String
strLocalTable = "zoo"
CurrentDb.Execute "select * into " & strLocalTable & " FROM qryPassR"
End Sub
Выше, конечно, предполагается, что вы создали соединение с сервером SQL (одна база данных), когда вы создали запрос PT. Приведенный выше подход хорош, поскольку вы не возитесь со строками соединения в коде.
Однако, если вам нужно (хотите) указать базу данных (и, скорее всего, сервер), то выше становится так:
Sub TestImport2()
Dim strSQL As String
Dim strServer As String
Dim strDatabase As String
Dim strUser As String
Dim strPass As String
strServer = ""
strDatabse = ""
strUser = ""
strPass = ""
Dim strLocalTable As String
Dim strServerTable As String
With CurrentDb.QueryDefs("qryPassR")
.Connect = dbCon(strServer, strDatabase, strUser, strPass)
.SQL = "select * from " & strServerAble
End With
CurrentDb.Execute "select * into " & strLocalTable & " FROM qryPassR"
End Sub
Выше используется «удобная» функция для создания строки подключения.
Эта функция выглядит следующим образом:
Public Function dbCon(ServerName As String, _
DataBaseName As String, _
Optional UserID As String = "", _
Optional USERpw As String, _
Optional APP As String = "Office 2010", _
Optional WSID As String = "Import") As String
' returns a SQL server conneciton string
dbCon = "ODBC;DRIVER=" & SQLDRIVER & ";" & _
"SERVER=" & ServerName & ";" & _
"DATABASE=" & DataBaseName & ";"
If UserID <> "" Then
dbCon = dbCon & "UID=" & UserID & ";" & "PWD=" & USERpw & ";"
End If
dbCon = dbCon & _
"APP=" & APP & ";" & _
"WSID=" & WSID & ";" & _
"Network=DBMSSOCN"
End Function
Редактировать
Автор попросил найти решение для добавления данных в СУЩЕСТВУЮЩУЮ таблицу.
В этом случае просто измените это:
CurrentDb.Execute "select * into " & strLocalTable & " FROM qryPassR"
К
CurrentDb.Execute "INSERT INTO " & strLocalTable & " SELECT * FROM qeryPassR"