使用C#/ VBScript获取mdb文件(msaccess)中的所有源代码

我想从Access数据库(表单,模块)获取所有源代码,而不使用Office interops。

我喜欢这里的AllCodeToDesktop()函数。 但是,它从mdb文件内部运行。

什么是VBScript文件加载mdb文件并在其上运行该函数?

为了节省大量时间,你有没有理由不使用内置的文档?

工具 – > analyze->文档管理器

以上function可以生成包含表单,报表,模块和类模块中所有代码的报表。 此报告可以发送到word或甚至保存为文本文件。

我只提这个来节省你的时间和精力。 这里不需要编写任何代码。

更多说明:我认为你不能做到这一点。 您可以将ms-access用作com对象,并使用代码将代码作为文本提取,但您需要在该计算机上安装访问权限。

有两种方法,一种是使用saveastext命令。 这将导出任何表单,报表,代码等作为文本文件(这是源代码加载项全部使用的)。

第二种方法是编写自动化代码。 这是本机访问(VBA)中的代码,但您也可以使用支持com对象的任何语言编写此代码。 代码如下所示:

  Dim db As Database Dim Doc As Document Dim mdl As Module Dim lngCount As Long Dim strForm As String Dim strOneLine As String Dim sPtr As Integer Set db = CurrentDb() ' count module LOC For Each Doc In db.Containers("Modules").Documents DoCmd.OpenModule Doc.Name Set mdl = Modules(Doc.Name) lngCount = lngCount + mdl.CountOfLines For i = 1 To lngCount strOneLine = mdl.Lines(i, 1) Debug.Print strOneLine Next i Set mdl = Nothing DoCmd.Close acModule, Doc.Name Next Doc 

上面的代码可以很容易修改为seach或导出文本。 我认为使用saveastext然后代码较少,但是你得到了表单定义等,这可能不是你想要的。

我想从访问数据库(表单,模块)获取所有源代码 – 不使用office interops

Microsoft Office是必需的。 您也可以将您的函数粘贴到MDB中并从那里运行它。

如果是存储库,您可能需要查看Visual SourceSafe并获取Access VSS插件(该链接适用于Access 2003,尚未尝试其他版本) http://www.microsoft.com/downloads/details.aspx ?FAMILYID = 2ea45ff4-a916-48c5-8f84-44b91fa774bc&displaylang = EN

我猜测Access插件将公开一个COM接口,如果你想走那条路,你可以合理地将源提取到你的C#应用​​程序中。 在任何一种情况下,正如罗伯特所说,Office仍然是必需的。

我是一个卑微的Access程序员,不能说我理解你的问题。

据我所知,为了得到你想要的东西,你将不得不通过COM自动化Access – 没有别的办法。 执行此操作的例程是版本无关的,并且可以在至少97的所有Access版本中工作,只要您自动化的Access版本与您正在检查的文件向前兼容(即,A2000将无法检查ACCDB,可能(或可能不)给A2002,A2003和A2007 MDB提供不可靠的结果。

关键是使用Application.SaveAsText来保存所有代码承载对象。 这意味着您需要遍历所有模块,表单和报告以及具有代码模块的模块,使用SaveAsText输出。 对于表单和报表,您可能需要检查HasModule属性(尽管这只在设计或表单视图中可用,即表单必须打开)如果要跳过所有缺少模块的对象。

如果你不关心A97兼容性,那就容易多了。 您可以使用CurrentProject.AllForms,CurrentProject.AllReports和CurrentProject.AllModules。 如果您不关心使用代码模块区分表单/报表以及不在此阶段的表单/报表,则无需打开它们来检查HasModule属性。 相反,您可以查看生成的导出文本文件。 如果没有模块,则输出文件中将缺少标记CodeBehindForm。

但是,表单有一个模块但没有实际代码是很常见的。 这些模块将在SaveAsText输出中列出,如下所示:

  CodeBehindForm Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Compare Database Option Explicit 

Option Explicit可能存在也可能不存在,并且技术上不需要选项比较数据库,但在Access中创建的99%的模块将具有一个或两个(仅在Access 2000中使用默认设置创建的数据库将缺少Option Explicit)。 代码将在4个属性之后开始。 如果它只是两个OPTION语句,那么表单后面没有真正的代码。

您应该能够在安装了Access版本的任何PC上从vbScript执行Access的COM自动化,该版本与您要检查的所有MDB / ACCDB向前兼容。