2011-08-17 25 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会员