C# 编码的MDB表和内容

C# 编码的MDB表和内容,c#,ms-access,vb6,encryption,C#,Ms Access,Vb6,Encryption,我有一个非常旧的VB 16位应用程序,它可以使用.MDB文件,因为还有一个.MDA文件——因此我猜它是使用access 2.0制作的。需要把我们的表格、关系和内容拿出来。表数据采用“丹麦”语言 我的老板有版权,但没有管理员用户名和密码。应用程序运行良好,这意味着应用程序能够连接到MDB文件并使用它。我在Windows7 32位机器上运行它 数据库似乎是经过编码的。知道他们使用RC4编码,并且.MDB头包含它的密钥 是否有一种方法可以从encoded.MDB中获取表和数据。我试过我的mdb解锁工具

我有一个非常旧的VB 16位应用程序,它可以使用.MDB文件,因为还有一个.MDA文件——因此我猜它是使用access 2.0制作的。需要把我们的表格、关系和内容拿出来。表数据采用“丹麦”语言

我的老板有版权,但没有管理员用户名和密码。应用程序运行良好,这意味着应用程序能够连接到MDB文件并使用它。我在Windows7 32位机器上运行它

数据库似乎是经过编码的。知道他们使用RC4编码,并且.MDB头包含它的密钥

是否有一种方法可以从encoded.MDB中获取表和数据。我试过我的mdb解锁工具,大多数工具都不知道它是.mdb,但应用程序可以工作

我急切地想找到一个解决办法。非常感谢您的帮助

知道他们使用RC4编码,并且.MDB头包含 信息技术有没有办法从encoded.MDB中获取平板电脑和数据

必须使用对象模型代码从Access数据库文件中删除所有内容。以下是从损坏的Access数据库提取数据的脚本:

   Function FilterDB(strFilePath As String)
   Dim objAccess As Object
   Dim strFolder As String
   Dim strCurrentFile As String
   Dim strCurrentObject As String
   Dim strFilteredDB As String

   Dim fs
   Dim Ref
   Dim f As Object
   Dim objtype As AcObjectType

   Dim objAllObjects As New Collection
   Dim objObjectGroup As Object
   Dim intObjType As Integer
   Dim i As Integer
   Dim j As Integer
   Dim intRefNum As Integer

   Dim RefItem As Reference
   Dim arrayRefs() As String

   Dim strErrMsg As String

   'Open the source database
   Set objAccess = CreateObject("Access.Application.10")

   On Error GoTo ErrorHandler

   objAccess.OpenCurrentDatabase strFilePath, False

   strFolder = Left(strFilePath, InStrRev(strFilePath, "\", Len(strFilePath)))
   strFilteredDB = Left(strFilePath, Len(strFilePath) - 4) & "filtered.mdb"

   With objAllObjects
       .Add objAccess.CurrentData.AllQueries
       .Add objAccess.CurrentProject.AllForms
       .Add objAccess.CurrentProject.AllReports
       .Add objAccess.CurrentProject.AllMacros
       .Add objAccess.CurrentProject.AllModules
       .Add objAccess.CurrentProject.AllDataAccessPages
   End With

   Set fs = CreateObject("Scripting.FileSystemObject")

   If Not fs.folderexists(strFolder & "\texttmp") Then
       fs.CreateFolder (strFolder & "\texttmp")
   End If

   For i = 1 To objAllObjects.Count

       If objAllObjects(i).Count > 0 Then
           For j = 0 To objAllObjects(i).Count - 1
              
              Set objObjectGroup = objAllObjects(i)
    
              strCurrentObject = objObjectGroup(j).Name
              intObjType = objObjectGroup(j).Type
              objAccess.SaveAsText intObjType, strCurrentObject, _
              strFolder & "texttmp\" & strCurrentObject & intObjType & ".txt"
         
           Next j
       End If
       
   Next i
    
   'Bring in All the references
   On Error Resume Next
         
   ReDim arrayRefs(objAccess.References.Count - 1, 2) As String
         
   For Each RefItem In objAccess.References()
       If Not IsError(RefItem.Name) Then
            
           arrayRefs(intRefNum, 0) = RefItem.Name
           arrayRefs(intRefNum, 1) = RefItem.FullPath
           intRefNum = intRefNum + 1
           
       End If
   Next RefItem

   On Error GoTo ErrorHandler
    
   Debug.Print ""
   objAccess.Quit
   Set objAccess = Nothing

   Set objAccess = CreateObject("Access.Application")

   objAccess.NewCurrentDatabase strFilteredDB

   'Finds the first occurrence of a text file in the
   'texttmp folder.
   strCurrentFile = Dir(strFolder & "\texttmp" & "\*.txt")
          
   'Count the files in the folder.
   Set f = fs.GetFolder(strFolder)
          
   'Check to see if the folder is empty.
   'If not, load in all the files from there
   If f.Files.Count <> 0 Then

   Do Until strCurrentFile = ""
      intObjType = Mid(strCurrentFile, Len(strCurrentFile) - 4, 1)
      objAccess.LoadFromText intObjType, _
      Left(strCurrentFile, Len(strCurrentFile) - 5), _
      strFolder & "\texttmp\" & strCurrentFile
      strCurrentFile = Dir
   Loop
   End If
          

   On Error Resume Next

   For i = 0 To UBound(arrayRefs())

       Set Ref = objAccess.References.AddFromFile(arrayRefs(i, 1))
       
   Next i

   MsgBox "Finished creating filtered file:" & Chr(10) _
   & objAccess.CurrentProject.FullName & "."

FunctionEnd:

   On Error Resume Next
   Set fs = CreateObject("Scripting.FileSystemObject")

   If fs.folderexists(strFolder & "\texttmp") Then
       fs.deletefolder (strFolder & "\texttmp")
   End If

   objAccess.Quit
   Set objAccess = Nothing
   Set f = Nothing

   Exit Function

ErrorHandler:

   Select Case Err.Number

       Case 58, 7866
       strErrMsg = "The path\file name " & strFilePath _
           & " may be incorrect or the " _
           & Chr(10) & " database is opened exclusively by someone else." _
           & Chr(10) & Chr(10) & _
           "Please insure your path and file name are correct " _
           & Chr(10) & "and the database is not open."

       Case 7865
       strErrMsg = "The follwing database:" & Chr(10) & Chr(10) _
           & strFilteredDB & Chr(10) & Chr(10) _
           & "already exists." _
           & Chr(10) & Chr(10) & _
           " Please rename, move, or delete it before running" _
           & "the FilterDB function."

       Case Else
       strErrMsg = "Access Error #" & Err.Number & Chr(10) & Chr(10) & _
       Err.Description
           
   End Select

   MsgBox strErrMsg

   GoTo FunctionEnd

   End Function
函数FilterDB(strFilePath作为字符串)
作为对象的暗淡对象
作为字符串的Dim strFolder
将strCurrentFile设置为字符串
作为字符串的Dim strCurrentObject
作为字符串的Dim strFilteredDB
暗fs
暗参考
将f作为对象
作为对象类型的Dim objtype
将对象对象变暗为新集合
Dim objObjectGroup作为对象
Dim InObjType为整数
作为整数的Dim i
作为整数的Dim j
Dim intRefNum作为整数
以它们作为参考
Dim arrayRefs()作为字符串
Dim strErrMsg作为字符串
'打开源数据库
Set objAccess=CreateObject(“Access.Application.10”)
关于错误转到错误处理程序
objAccess.OpenCurrentDatabase strFilePath,False
strFolder=Left(strFilePath,InStrRev(strFilePath,“\”,Len(strFilePath)))
strFilteredDB=Left(strFilePath,Len(strFilePath)-4)和“filtered.mdb”
带对象
.Add objAccess.CurrentData.AllQueries
.添加objAccess.CurrentProject.AllForms
.添加objAccess.CurrentProject.AllReports
.添加objAccess.CurrentProject.AllMacros
.添加objAccess.CurrentProject.AllModules
.添加objAccess.CurrentProject.AllDataAccessPages
以
设置fs=CreateObject(“Scripting.FileSystemObject”)
如果不是fs.folderexists(strFolder&“\texttmp”),则
fs.CreateFolder(strFolder&“\texttmp”)
如果结束
对于i=1到objAllObjects.Count
如果objAllObjects(i).Count>0,则
对于对象(i),j=0。计数-1
设置objObjectGroup=objAllObjects(i)
strCurrentObject=objObjectGroup(j).Name
intObjType=ObjJobjectGroup(j)。类型
OBJACESS.SaveAsText INTOBJECTYPE、STRURRENTOBJECT、_
strFolder&“texttmp\”&strCurrentObject&intObjType&“.txt”
下一个j
如果结束
接下来我
“把所有的参考资料都带进来
出错时继续下一步
将arrayRefs(objAccess.References.Count-1,2)重拨为字符串
对于objAccess.References()中的每个RefItem
如果不是IsError(RefItem.Name),则
arrayRefs(intRefNum,0)=refeem.Name
arrayRefs(intRefNum,1)=refeem.FullPath
intRefNum=intRefNum+1
如果结束
下一步
关于错误转到错误处理程序
调试。打印“”
objAccess.退出
设置对象访问=无
Set objAccess=CreateObject(“Access.Application”)
objAccess.NewCurrentDatabase strFilteredDB
'在中查找文本文件的第一个匹配项
'文本TMP文件夹。
strCurrentFile=Dir(strFolder&“\texttmp”&“\*.txt”)
'对文件夹中的文件进行计数。
Set f=fs.GetFolder(strFolder)
'检查文件夹是否为空。
'如果不是,则从那里加载所有文件
如果f.Files.Count为0,则
直到strCurrentFile=“”
intObjType=Mid(strCurrentFile,Len(strCurrentFile)-4,1)
objAccess.LoadFromText到bjType_
左(strCurrentFile),长(strCurrentFile)-5_
strFolder&“\texttmp\”&strCurrentFile
strCurrentFile=Dir
环
如果结束
出错时继续下一步
对于i=0到UBound(arrayRefs())
Set Ref=objAccess.References.AddFromFile(arrayRefs(i,1))
接下来我
MsgBox“已完成创建筛选文件:”&Chr(10)_
&objAccess.CurrentProject.FullName&“
功能结束:
出错时继续下一步
设置fs=CreateObject(“Scripting.FileSystemObject”)
如果fs.folder存在(strFolder&“\texttmp”),则
fs.deletefolder(strFolder&“\texttmp”)
如果结束
objAccess.退出
设置对象访问=无
设置f=无
退出功能
错误处理程序:
选择案例错误编号
案例58,7866
strErrMsg=“路径\文件名”&strFilePath_
&“可能不正确或错误”_
&Chr(10)&“数据库是由其他人专门打开的。”_
&Chr(10)及Chr(10)及_
“请确保您的路径和文件名正确”_
&Chr(10)&“且数据库未打开。”
案例7865
strErrMsg=“以下数据库:”&Chr(10)&Chr(10)_
&strFilteredDB和Chr(10)和Chr(10)_
&“已经存在。”_
&Chr(10)及Chr(10)及_
请在运行之前重命名、移动或删除它_
&“FilterDB函数。”
其他情况
strErrMsg=“访问错误”&Err.Number&Chr(10)&Chr(10)&_
错误描述
结束选择
MsgBox strErrMsg
转到功能结束
端函数
我今天不得不使用这个代码。您必须复制数据库,然后将上述代码粘贴到模块中,并从即时窗口运行mod.FilterDB(“E:\PathToTheCopy.mdb”)


谢谢你,杰里米,我会试试的。嗨,杰里米,我试过上面的代码,它有一个错误-任何一条路径都不正确