Cara menggunakan Fungsi Publik MS Access dari VB6

Saya memiliki database MS Access dengan Fungsi Publik yang ditentukan dalam VBA, disimpan di Module1. Saya ingin memasukkan fungsi tersebut sebagai bagian dari kueri yang diserahkan ke ADODB dari VB6 dengan metode Terbuka ADODB.RecordSet.

Fungsi VBA disebut IsOpcodePresent dan mengambil dua parameter yang disediakan dalam kueri.

Kueri (disingkat) adalah

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

Bisakah ini dilakukan? Jika saya menggunakan fungsi Access standar seperti IsNull, maka itu berfungsi. Tapi dengan fungsi saya sendiri tidak.


person bugmagnet    schedule 22.10.2012    source sumber
comment
apa yang IsOpcodePresent kembalikan?   -  person John Woo    schedule 22.10.2012
comment
Anda tidak dapat menggunakan UDF (fungsi) di luar instans Access.   -  person Fionnuala    schedule 22.10.2012


Jawaban (2)


Saya khawatir itu tidak mungkin. Anda memerlukan instance MS Access.

Ada dua bagian "database" MS Access. Formulir, laporan dan kode, disimpan di MS Access dan datanya, umumnya disimpan di database Jet/ACE. Permintaan ADODB Anda merujuk ke database Jet/ACE, yang tidak memiliki koneksi ke "front-end". Saat Anda menjalankan kueri di MS Access, kueri tersebut memiliki referensi ke kode.

Tergantung pada fungsinya, penulisan ulang dapat dilakukan sebagai Makro Data jika Anda menggunakan Access 2010 atau lebih baru. Ini akan berjalan bahkan di luar MS Access karena terikat dengan database ACE.

person Fionnuala    schedule 22.10.2012
comment
Oke, jadi jika saya membuat instance Access.Application, lalu bagaimana? - person bugmagnet; 23.10.2012
comment
Saya pasti tidak menjelaskannya dengan benar. Kueri yang menggunakan Fungsi Buatan Pengguna atau fungsi Access tidak akan dijalankan di luar MS Access. Jika Anda membuat instance Access, Anda bisa menjalankan kueri di Access, saya kira, bukan yang Anda inginkan. - person Fionnuala; 23.10.2012

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

Inilah yang saya inginkan. Ini berfungsi dengan baik asalkan tidak ada pemblokiran skrip atau skrip ditandatangani dan database menerima tanda tangan. Ini memberi saya hasil array 2D dan memungkinkan saya menggunakan fungsi berbasis skrip.

person bugmagnet    schedule 26.10.2012