2011-08-17 137 views
0

這裏的第一次海報...失去我的Access數據庫密碼在緊湊,如何從VB重置?

我的VB.NET程序壓縮和修復我的數據庫,但在進程中的某個地方取消數據庫密碼。沒問題,只需通過VB重置它,對吧?呃......不知道該怎麼去做。

所以我需要知道如何在不丟失密碼的情況下壓縮它,或者在丟失密碼後如何重置密碼。

盡我所能,使我的文章中的代碼看起來像樣,讓我知道如果有更好的方法。

謝謝!

Dim strAccessDatabasePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "App_Data\Squirrel.accdb"   
Dim LockedDbFileInfo As New System.IO.FileInfo(strAccessDatabasePath.Replace(".accdb", ".laccdb"))   
Dim TempFolder As String = System.AppDomain.CurrentDomain.BaseDirectory & "App_Data\temp"   
Dim TempDB As String = TempFolder & "\temp.accdb" 

If LockedDbFileInfo.Exists Then    
    MsgBox("Database is in use. Please make sure no users are in the database before performing maintenance.")   
Else    
    MsgBox("This program has detected no current database users and will proceed with database maintenance.")   
End If 

Try    
    Directory.CreateDirectory(TempFolder)   
Catch ex As Exception    
    MsgBox("There has been an error creating a temporary directory in your application directory. Please check credentials and try again.")   
End Try 

Dim time As DateTime = DateTime.Now   
Dim format As String = "MMM d yyyy HHmmss "   
Dim TempDateTime As String = time.ToString(format)   

'Copy DB to backup directory.   
Try    
    File.Copy(strAccessDatabasePath, txtDBbackupFolder.Text & "\" & "DBbkup " & TempDateTime & ".accdb")   
Catch ex As Exception    
    MsgBox("There was an issue writing to the backup folder. Please check credentials and try again.")   
End Try  

'Copy DB to temp directory for maintenance.   
File.Copy(strAccessDatabasePath, TempFolder & "\" & "temp.accdb")   
File.Delete(strAccessDatabasePath)   
Dim JROEng As Object   
JROEng = CreateObject("JRO.JetEngine")   
JROEng.CompactDatabase("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & TempDB & ";Jet OLEDB:Database Password=woodkitten70;Jet OLEDB:Engine Type=5", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ 
strAccessDatabasePath & ";Jet OLEDB:Engine Type=5")   
'connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\App_Data\Squirrel.accdb;Jet OLEDB:Database Password=XXXXXXXXX" 

Try    
    Kill(TempFolder & "\*.*")   
Catch ex As Exception    
    'MsgBox(ex.Message)   
End Try   
Directory.Delete(TempFolder)` 
+0

不禁有兩個關於你的代碼的問題 - `Kill`​​是VB6,應該更新爲:`For My FoundFile As String in My.Computer.FileSystem.GetFiles`,你不應該發佈你的數據庫密碼(我已經編輯過它) – 2011-08-17 15:58:40

+0

至於密碼去,它已經在野外(並且它在代碼中的多個地方)。它應該改變。 – BIBD 2011-08-17 17:36:41

回答

0

您可以參考Access interop並使用小型修復嗎? 「Microsoft.Office.Interop.Access.ApplicationClass.CompactRepair(字符串,字符串,[布爾])爲布爾」

Public Overridable Function CompactRepair(ByVal SourceFile As String, ByVal DestinationFile As String, Optional ByVal LogFile As Boolean = False) As Boolean 

Microsoft.Office.Interop.Access.ApplicationClass會員

相關問題