我需要在Access數據庫上執行壓縮和修復操作。爲了做到這一點,所有打開的數據庫連接都需要關閉。不幸的是,我有一些開放的連接,我不能一直追查並正確關閉。有沒有辦法通過代碼斷開所有打開的連接?斷開與MS Access數據庫的所有開放連接
5
A
回答
3
沒有什麼講究的訪問文件說相比到一個文本文件,或者一個簡單的電源點文件坐在磁盤上。我們在這裏討論的是一個平面jane窗口文件。
所以,你真正的問題是你可以斷開一個文件打開的進程或任何剛剛坐在硬盤上的舊文件?
您可能會終止進程和連接,但是您再次無法確保掛起的數據寫入該word文件(或訪問mdb文件)會發生。因此,就我所知,即使您可以確定哪個進程已打開該電源點文件,我不認爲您可以可靠地終止該進程並關閉連接到已打開的文件並確保該進程已關閉待寫入的數據實際上將被寫入。在等待寫入磁盤的更新方面,您無法知道該代碼和進程有何未決。
雖然在電源點文件中寫出未決數據可能不是什麼大不了的事情,但在數據的情況下,您要求真正的麻煩。
這裏唯一真正的方法是對windows文件打開的應用程序/進程進行優雅而正確的關閉。
關於你所有的代碼可以嘗試的是獲得文件的獨佔使用,如果你不能這樣做,那麼你必須通知用戶,緊湊是不可能的,直到獨佔使用該文件可以獲得。
您當然可以在計算機上打開管理工具,然後檢查打開文件的用戶,但是要終止這些用戶連接是需要您自擔風險的。
0
0
我知道這是一個遲到的答案,但在這裏我去...
雖然確定是否已經存儲了數據是另一個問題完全,如果這不是一個問題,有幾個可供選擇取決於你的設置。假設MS Access數據庫和你是一個Windows網絡上,並且您知道計算機名(一個或多個)的用戶登錄,這可能是一個選項:
Public Function StopProcess(PC As String) As Boolean
On Error GoTo Errhandler
Dim strComputer As String
Dim objWMIService As Variant
Dim colProcessList As Variant
Dim objProcess As Variant
' Add the user domain
strComputer = PC & ".yourdomain.com"
Set objWMIService = GetObject(_
"winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery(_
"SELECT * FROM Win32_Process WHERE Name = 'msaccess.exe'")
' Note: authority to do this must be provided prior for this function working
' Also, note this kills all open MS Access database the user has open
For Each objProcess In colProcessList
Call objProcess.Terminate
Next
Errhandler:
On Error Resume Next
End Function
然後看看哪些用戶仍登錄你可以通過執行類似下面的過程outlined by Microsoft in a KB查詢JET數據庫:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=" & Path
Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _
"{947bb102-5d43-11d1-bdbf-00c04fb92675}")
If not rs.EOF Then
' Note: Fields 0 = COMPUTER_NAME, 1 = LOGIN_NAME, _
' 2 = CONNECTED, 3 = SUSPECT_STATE
Debug.Print rs.Fields(0) & " - " & _
rs.Fields(1) & " - " & _
rs.Fields(2) & " - " & _
rs.Fields(3)
End If
我希望對您有所幫助。
相關問題
- 1. 斷開與數據庫的連接
- 2. MS Access數據庫連接
- 3. MS Access 2007中的數據庫連接
- 4. OOP數據庫連接/斷開類
- 5. 如何從所有數據庫連接字符串斷開連接
- 6. 數據庫連接在與數據庫相同的PC上開發時始終斷開連接
- 7. 無法打開MS-Access ADO連接
- 8. 連接到MS Access數據庫(.accdb)沒有「Access數據庫引擎2010」
- 9. 斷開與Openstack的連接?
- 10. 在Linux上與MS Access的數據庫連接主機
- 11. Android BLE GATT斷開連接與設備斷開連接
- 12. 在BASH中使用與PostgreSQL的開放數據庫連接?
- 13. Cypher查詢列出所有斷開連接的圖Neo4j圖形數據庫?
- 14. 與Access的asp.net數據庫連接
- 15. 斷開連接的數據集
- 16. 使用斷開連接的數據
- 17. 與開放層3和postgresql數據庫連接
- 18. 如何斷開與數據庫的現有紅寶石續集連接?
- 19. MS Visual Studio 2010數據庫連接到MS Access 2007
- 20. 春季開機和休眠mysql數據庫連接不斷斷開
- 21. 連接池與Access數據庫
- 22. 數據集如何斷開連接?
- 23. 開放連接的開銷
- 24. 所有嵌入式數據庫無法打開連接
- 25. 使用Access或Microsoft SQL數據庫連接Oracle開發人員
- 26. 斷開而不斷開連接?
- 27. 參考函數內部的開放數據庫連接 - Golang
- 28. 如何正確刪除所有連接到Access數據庫
- 29. 與Derby斷開連接的彈簧
- 30. 斷開與SMO的活動SQL連接