2013-08-27 4 views
0

У меня есть три таблицы в Access: один связан с Excel, один связан с MySQL и локальная таблица с именем LastQuery с одной строкой и столбцом. Я использую запрос VBA в форме с таймером для выбора данных из таблицы Excel и вставки их в таблицу MySQL. В то же время я обновляю dtmInsertedTime последней записи, которую я вставил в LastQuery (в строку под названием last), так что в следующий раз, когда отметит таймер формы, она будет продолжена из следующей записи и продолжит, пока она не вставит каждый запись. Мой код прост, но я получаю ошибки и не могу заставить его работать, как я описал. Вот мой код:Вставить строку из одной связанной таблицы в другую

Private Sub Form_Timer() 
CurrentDb.Execute "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) SELECT vchrFacility, intWorkCell, intStn, intEventCode from excelTblEvent where dtmInsertedTime > LastQuery.Last" 
CurrentDb.Execute "UPDATE LastQuery, excelTblEvent SET LastQuery.Last = excelTblEvent.dtmInsertedTime" 
End Sub 

EDIT:

Я не мог бы сделать это без вас, ребята. Мой код делает именно то, что я хочу, чтобы это сделать, без каких-либо проблем:

Option Compare Database 
Private Sub Form_Timer() 
CurrentDb.Execute "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) SELECT vchrFacility, intWorkCell, intStn, intEventCode FROM excelTblEvent WHERE dtmInsertedTime > DLookup('Last', 'LastQuery')" 
CurrentDb.Execute "UPDATE LastQuery, excelTblEvent SET LastQuery.Last = excelTblEvent.dtmInsertedTime" 
End Sub 
+1

Каковы будут ошибки, которые вы получили? –

+0

Я получаю другую ошибку при каждом изменении кода. Для вышеприведенного кода я получаю ошибку времени выполнения 3061 (Слишком мало параметров. Ожидаемое 1). Мое исследование показало его из-за ошибки в запросе, поэтому я избавился от той части запроса и застрял с ошибкой 3155 во время выполнения (ODBC - вставка в связанную таблицу не удалась) – Th1nker

ответ

0

Access 'db engine будет жаловаться на это заявление INSERT. Осмотрите SELECT часть заявления:

SELECT vchrFacility, intWorkCell, intStn, intEventCode 
from excelTblEvent 
where dtmInsertedTime > LastQuery.Last 

Предложение WHERE ссылается на источник данных, LastQuery, который не упоминается в пункте FROM. Это не сработает. Мы должны были бы знать больше о LastQuery, но как дикое предположение, возможно, это могло бы работать ...

WHERE dtmInsertedTime > DLookup("Last", "LastQuery") 

Если доступ жалуется на UPDATE заявление, вновь построить его в конструктор запросов. После того, как вы заработаете там, адаптируйте свой код VBA для использования того же рабочего SQL.

+1

Это похоже на то, чтобы немного устранить ошибки. Форма загружается без ошибок, но, похоже, ничего не делает, несмотря на то, что я добавляю новые записи. Я буду принимать ваши советы и работать с дизайнером запросов до тех пор, пока он не станет функциональным. Спасибо. – Th1nker

+0

Событие формы Timer может быть сложным. После правильной работы запросов в дизайнере сначала проверьте свой код VBA в другой процедуре, например, событие щелчка кнопки команды. Задайте точку прерывания и шаг за строкой кода по строке F8, чтобы увидеть, что происходит (или нет) на каждом шаге. – HansUp

+0

Спасибо за вашу помощь, я получил код, работающий точно так, как я хотел. Мое редактирование OP показывает мой последний код. – Th1nker

0

записка с помощью раздела Database.Execute метода говорит,

ODBCDirect рабочие области не поддерживаются в Microsoft Office Access 2007 Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования механизма базы данных Microsoft Access.

Возможно, вам придется пройти этот маршрут.

+0

А, я думаю, это время узнать ADO! Спасибо за вашу помощь =) – Th1nker

Смежные вопросы