2013-08-27 86 views
0

我在Access中有三個表:一個鏈接到Excel,一個鏈接到MySQL,一個名爲LastQuery的本地表具有單個行和一列。我在一個帶有計時器的窗體中使用VBA查詢來從Excel表中選擇數據並將其插入到MySQL表中。與此同時,我更新了插入到LastQuery的最後一條記錄的dtmInsertedTime(在標題爲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 

編輯:

我不能做它沒有你們。我的代碼不正是我想要它做的,沒有任何問題:

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

訪問'數據庫引擎會抱怨INSERT聲明。檢查語句的SELECT部分:

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

WHERE子句引用一個數據源,LastQuery,這是不是FROM子句中提到。這是行不通的。我們需要更多地瞭解LastQuery,但作爲一個胡亂猜測也許這可能工作...

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

如果Access埋怨UPDATE聲明,在查詢設計器重新編譯。當你在那裏工作後,調整你的VBA代碼以使用相同的工作SQL。

+1

這似乎安靜了很多錯誤。表單加載沒有錯誤,但似乎沒有做任何事情,儘管我添加了新記錄。我會接受你的建議,並與查詢設計師一起工作,直到它變得功能正常。謝謝。 – Th1nker

+0

表單計時器事件可能會非常棘手。在設計器中查詢正常工作後,請先在另一個過程中測試VBA代碼,例如命令按鈕的單擊事件。設置一箇中斷點,並用F8逐行掃描代碼,以查看每個步驟中(或不在)發生的事情。 – HansUp

+0

感謝您的幫助,我得到了完全按照我的意願工作的代碼。我的OP編輯顯示我的最終代碼。 – Th1nker

0

從Database.Execute方法幫助部分的說明說,

適用於ODBCDirect工作區沒有在Microsoft Office Access 2007支持。如果您想要訪問外部數據源而不使用Microsoft Access數據庫引擎,請使用ADO。

您可能得走這條路線。

+0

啊,我想這是學習ADO的時間!感謝您的幫助=) – Th1nker

相關問題