0

我有一个 MS Access 数据库,它在 VBA 中定义了一个公共函数,存储在 Module1 中。我想将该函数作为查询的一部分包含在内,该查询通过 ADODB.RecordSet 的 Open 方法从 VB6 传递给 ADODB。

VBA 函数称为 IsOpcodePresent,它采用查询中提供的两个参数。

查询(缩写)是

SELECT * FROM tbl WHERE IsOpcodePresent(example,syl) order by syl;

这可以做到吗?如果我使用像 IsNull 这样的标准 Access 函数,那么它就可以工作。但对于我自己的功能,它没有。

4

2 回答 2

4

恐怕这是不可能的。您需要一个 MS Access 实例。

MS Access“数据库”有两个部分。表单、报告和代码保存在 MS Access 中,数据通常保存在 Jet/ACE 数据库中。您的 ADODB 查询引用了 Jet/ACE 数据库,它与“前端”没有连接。当您在 MS Access 中运行查询时,它会引用代码。

根据功能,如果您使用 Access 2010 或更高版本,可能会重写为数据宏。它们甚至可以在 MS Access 之外运行,因为它们与 ACE 数据库相关联。

于 2012-10-22T15:43:36.340 回答
0
Function GetAccessRecordset(sDatabase As String, sSQL As String) As Variant
    Dim oAccess As Object
    Set oAccess = CreateObject("Access.Application")
    oAccess.OpenCurrentDatabase (sDatabase)
    oAccess.Visible = False
    Dim dbs As Object
    Set dbs = oAccess.CurrentDb.OpenRecordSet(sSQL)
    GetAccessRecordset = dbs.GetRows(dbs.RecordCount)
    dbs.Close
    oAccess.Quit
End Function

这就是我想要的。只要没有脚本阻塞或脚本已签名并且数据库接受签名,它就可以正常工作。它为我提供了二维结果数组,并让我使用基于脚本的函数。

于 2012-10-26T00:59:09.020 回答