#ms-access #vba
#ms-access #vba
Вопрос:
Я пытался перенести данные моей таблицы Access на SQL server, но я получаю сообщение об ошибке, в котором говорится
Переменная объекта или с переменной блока не установлена
Я уже подключил свою базу данных Access к SQL server, но теперь столкнулся с проблемой передачи данных на SQL server с помощью кода VBA.
Не могли бы вы помочь мне с этим?
Вот мой код:
Public Sub ADOtest()
Dim ADOConn As New ADODB.Connection
Dim ADOCom As New ADODB.Command
On Error Resume Next
ADOConn.ConnectionString = "Driver={SQL Server};Server=IT-TEMP2-8470PSQLEXPRESS2014;Database=Discrepancy;Trusted_Connection=True;"
ADOConn.Open
Debug.Print ADOConn.State
Dim db As Database
Dim Discrepancy As Database
Set db = Discrepancy
Dim ID As Variant
db.Execute "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=IT-TEMP2-8470PSQLEXPRESS2014;DATABASE=Discrepancy].SFTransfersDB ( ID, TO ) SELECT ID,TO FROM SFTransfersDB"
End Sub
Я получаю ошибку во 2-й последней строке:
db.Execute "INSERT INTO [ODBC;DRIVER=SQL Server;SERVER=IT-TEMP2-8470PSQLEXPRESS2014;DATABASE=Discrepancy].SFTransfersDB ( ID, TO ) SELECT ID,TO FROM SFTransfersDB"
Комментарии:
1.
ADOConn.Execute
вместоdb.Execute
, но вам может понадобиться поставщик ACE или Jet для использования[ODBC;
частей2. Похоже, вы объединяете ADO с DAO. В вашей строке подключения ADO уже указана база данных, поэтому нет необходимости в отдельном объекте. Более того, после подключения нет необходимости в предложении распределенного запроса в запросе добавления в той же базе данных.
Ответ №1:
Похоже, вы пытаетесь выполнить специальный распределенный запрос. Если сервер разрешает это, рассмотрите возможность выполнения этого оператора после подключения к ADO. Нет необходимости вызывать объекты Access.
ADOConn.Execute "INSERT INTO dbo.SFTransfersDB ([ID], [TO])" _
" SELECT [ID], [TO] FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', " _
"'Data Source=""C:PathToAccessDatabase.accdb""')...SFTransfersDB;"
Ответ №2:
Вы объявляете две переменные базы данных, но не инициализируете их (вы не устанавливаете для них ничего):
Dim db As Database
Dim Discrepancy As Database
Итак, это
Set db = Discrepancy
совпадает с
Set db = Nothing
и поэтому, когда вы пытаетесь использовать db
, вы получаете ошибку, которая db
не установлена, а это не так.
Ответ №3:
Спасибо за ваши предложения.
В конце концов, я все понял правильно.
Я использовал «Set db = CurrentDb», и он работал идеально.