1

我的应用程序是用 Visual Basic 6 编写的,它有一个 Access 数据库。我想添加一个 VB 表单并以这种形式打开数据库以使 db 在其中编辑数据库。我有这个代码用于打开:

Dim db As DAO.Database

Set db = DBEngine.workspaces(0).opendatabase("c:\ss.mdb")

我在该数据库中有一个表格。这种形式使数据插入过程更快。我想用我的应用程序打开这个访问表单。我该怎么做?

注意:我有这段代码使用 Microsoft access 14 对象库。

Dim appaccess As Access.Application, dbstr As String

On Error Resume Next
Set appaccess = New Access.Application
Set appaccess = CreateObject("Access.Application")
dbstr = "c:\ss.mdb"
'Or dbstr="c:\my documents\yourfile.mdb
'put the correct path here.
appaccess.OpenCurrentDatabase dbstr
appaccess.DoCmd.OpenForm "aa", acLayout
appaccess.Visible = True

但是当我运行这段代码时,表单出现了,过了一会儿它就消失了。除了使用访问对象库会产生一些访问版本冲突。所以,虽然没有必要,但我更喜欢用 ADO 对象来做。无论如何,我正在寻找解决我问题的方法。

感谢您的帮助

4

3 回答 3

1

有一件事是您在第一段代码中使用的是 DAO,而不是 ADO。也许这并不重要,因为在您的第二个代码块中没有对 db 的引用。所以第一块代码看起来是不必要的。

我不知道为什么你有 2 个 appaccess 语句,你不需要第二个。另外,我建议您注释掉“on error resume next”语句,以便在调试时查看是哪一行导致了错误。

于 2012-09-03T10:08:08.867 回答
1

ADO 提供了与各种数据源交互的方法。尽管您可以将它用于 Access db 文件,但它不提供使用 Access 表单的方法。

使用您当前的方法,您可以CreateObject将对象变量设置appaccess为新的 Access 应用程序实例,然后在该实例中打开您的表单。但是,当变量超出范围时,Access 实例会关闭并且表单会消失。

您可能会修改您的 VB6 代码以将变量保留在范围内,直到您完成 Access 实例。不幸的是,我不知道如何将该更改融入您的代码的其余部分,而且我从未使用过 VB6。

或者,您可以使用Shell 函数启动 Access 实例,然后使用GetObject()将您的对象变量设置为该实例。

使用该Shell()方法,您需要提供MSACCESS.EXE. 您可以通过阅读注册表找到它所在的文件夹。这是一个执行此操作的 VBScript 示例,我希望您可以轻松地将其调整为 VB6。

Option Explicit
Dim MSAccFolder
Dim RegKey
Dim WSHShell

RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path"
Set WSHShell = WScript.CreateObject("WScript.Shell")
MSAccFolder= WSHShell.RegRead(RegKey)
WScript.Echo "MS Access Folder: " & MSAccFolder
Set WSHShell = Nothing
于 2012-09-03T16:19:07.340 回答
1

如果你打算使用 VB,你应该放弃 Access Automation 的东西并在 VB 中创建你的表单。然后使用 ADO 打开并使用 Access 文件。这比使用 VB 自动打开 Access 表单要高效得多。

于 2012-09-06T20:00:42.443 回答