0

Module1に格納された、VBAで定義されたパブリック関数を持つMS Accessデータベースがあります。ADODB.RecordSet の Open メソッドによって VB6 から ADODB に渡されるクエリの一部として関数を含めたいと思います。

VBA 関数は IsOpcodePresent と呼ばれ、クエリで提供される 2 つのパラメーターを受け取ります。

クエリ(省略)は

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

これはできますか?IsNull などの標準の Access 関数を使用すると、機能します。しかし、私自身の機能ではそうではありません。

4

2 に答える 2

4

それは不可能だと思います。MS Access インスタンスが必要です。

MS Access の「データベース」には 2 つの部分があります。フォーム、レポート、およびコードは MS Access に保持され、データは通常 Jet/ACE データベースに保持されます。ADODB クエリは、「フロントエンド」への接続を持たない Jet/ACE データベースを参照しています。MS Access でクエリを実行すると、コードへの参照が含まれます。

機能によっては、Access 2010以降であればデータマクロとして書き換え可能な場合があります。これらは ACE データベースに関連付けられているため、MS Access の外部でも実行されます。

于 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

これが私が欲しかったものです。スクリプトがブロックされていないか、スクリプトが署名されていて、データベースが署名を受け入れる場合、問題なく動作します。結果の 2D 配列が得られ、スクリプトベースの関数を使用できます。

于 2012-10-26T00:59:09.020 に答える