2014-02-21 36 views
0

我在Access中創建了一個儀表板,用於觀察我們用於數據錄入的Excel電子表格。我們避免鎖定電子表格是非常重要的,所以我一直使用保存在定時器上的數據導入。代碼在第一次運行時完美運行。在第二次刷新時,列表框將返回空白,並且表格的數據被刪除。實時Excel文件訪問儀表板

我的猜測是列表框正在鎖定表,所以我嘗試了一個DAO.Recordset,但我有同樣的問題。

如何繼續獲取此計時器的更新?

私人小組Form_Timer()

DoCmd.SetWarnings False 
DoCmd.RunSQL "DELETE test.* FROM TEST" 
DoCmd.RunSavedImportExport "DWOR" 
DoCmd.SetWarnings True 

Dim db As Database 
Set db = CurrentDb() 
Dim rs As DAO.Recordset 
Set rs = db.OpenRecordset("TEST", dbOpenDynaset) 
If rs.RecordCount > 0 Then 
    Set watcher.Recordset = rs 
End If 
'rs.Close 
'Me.watcher.RowSource = db.OpenRecordset("Test") 
'watcher.RowSource = "SELECT [test].[#], [test].[Line Set], [test].[Model], [test].[Chassis Def], [test].[Chassis Short], [test].[Cab-L], [test].[Cab-C MRU/LEU], [test].[Cab Short], [test].[Paint Qual], [test].[Paint Damage], [test].[Paint Short], [test].[MTR Rm], [test].[ENG], [test].[Westport], [test].[Vendor], [test].[Hood], [test].[Sleeper], [test].[Sub-Assem], [test].[OFFLINE] FROM test ORDER BY [#]; " 
watcher.Requery 

結束子

編輯: 我移動的情況下,以一個按鈕,列表框和表字段全部顯示爲中#Deleted。

+0

需要更多信息...定時器間隔是多少?我假設沒有錯誤信息產生?什麼是'看守'?這是代碼駐留的表單名稱嗎?如果是的話,爲什麼不將表單記錄源設置爲「測試」,然後重新查詢呢?如果是這樣,你應該完成後關閉並釋放RS和DB。另外,在您測試Recordcount> 0的IMO中,如果您轉移到ADO,將無法正常工作(它返回-1)。我會用「如果不是rs.eof」代替那一行。第二次幫助調試,顯示TEST的記錄數。如果> 0,則問題出現在RecordSource/Requery中。 –

+0

定時器間隔設置爲10秒。沒有錯誤消息被拋出,它只是清除表。測試只是表格的名稱。 Watcher是列表框的名稱。 我會嘗試將列表框直接綁定到「測試」,我只是試圖避免鎖定表。 編輯:綁定列表框鎖定表我相信。沒有錯誤消息被拋出,但表從未更新(而不是更新一次,然後清除) – Duffie

+0

爲了幫助調試,您可以在導入之後添加一個顯示來計算表中的記錄數嗎?如果爲零,那麼問題與導入有關。 –

回答

0

您可以將Excel文件設置爲鏈接表而不是將數據引入永久表中嗎?這不會導致在Excel文件中鎖定。然後,當您需要刷新時,只需運行如下所示的內容

Dim tdf As TableDef 
Dim db As Database 
Set db = CurrentDb 

Set tdf = db.TableDefs("your linked table name") 

tdf.RefreshLink 

當您更新基礎表時,表單上的數據將自動更新。

+0

鏈接表正是我所需要的,我剛剛避開它,因爲我總是遇到鏈接表鎖定用戶的問題。 是否有可能導致鏈接表鎖定Excel文件的錯誤? – Duffie

+0

@Duffie你如何設置你的'Recordset Type'?我正在使用似乎不會導致鎖定的「快照」。我可以讓我的表單在Access中打開,每當我在Excel中進行更改時,我都會刷新並且更改會通過(我甚至沒有保存)。 – Brad

+0

如果我嘗試打開鏈接表來查看記錄,連接就會全部搞亂(連接丟失,值看起來像'#ERROR'),但只要通過一切正常的形式來看它就行了。 – Brad