วิธีใช้ MS Access Public Function จาก VB6

ฉันมีฐานข้อมูล MS Access พร้อม Public Function ที่กำหนดไว้ใน VBA ซึ่งจัดเก็บไว้ใน Module1 ฉันต้องการรวมฟังก์ชันเป็นส่วนหนึ่งของแบบสอบถามซึ่งส่งไปยัง ADODB จาก VB6 โดยวิธี Open ของ ADODB.RecordSet

ฟังก์ชัน VBA เรียกว่า IsOpcodePresent และรับพารามิเตอร์สองตัวที่มีอยู่ในแบบสอบถาม

แบบสอบถาม (ตัวย่อ) คือ

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

สามารถทำได้หรือไม่? ถ้าฉันใช้ฟังก์ชัน Access มาตรฐาน เช่น IsNull มันก็ใช้งานได้ แต่ด้วยหน้าที่ของตัวเองกลับไม่เป็นเช่นนั้น


person bugmagnet    schedule 22.10.2012    source แหล่งที่มา
comment
IsOpcodePresent ส่งคืนอะไร   -  person John Woo    schedule 22.10.2012
comment
คุณไม่สามารถใช้ UDF (ฟังก์ชัน) ภายนอกอินสแตนซ์ Access ได้   -  person Fionnuala    schedule 22.10.2012


คำตอบ (2)


ฉันกลัวว่ามันเป็นไปไม่ได้ คุณจะต้องมีอินสแตนซ์ MS Access

"ฐานข้อมูล" ของ MS Access มีสองส่วน แบบฟอร์ม รายงาน และรหัส เก็บไว้ใน MS Access และข้อมูล โดยทั่วไปจะเก็บไว้ในฐานข้อมูล Jet/ACE ข้อความค้นหา ADODB ของคุณอ้างอิงถึงฐานข้อมูล Jet/ACE ซึ่งไม่มีการเชื่อมต่อกับ "ส่วนหน้า" เมื่อคุณเรียกใช้แบบสอบถามใน MS Access จะมีการอ้างอิงถึงรหัส

อาจเป็นไปได้ที่จะเขียนใหม่เป็น มาโครข้อมูล หากคุณใช้ Access 2010 หรือใหม่กว่า สิ่งเหล่านี้จะทำงานได้แม้อยู่นอก MS Access เนื่องจากเชื่อมโยงกับฐานข้อมูล ACE

person Fionnuala    schedule 22.10.2012
comment
ตกลง ถ้าฉันสร้างอินสแตนซ์ของ Access.Application แล้วจะทำอย่างไร - person bugmagnet; 23.10.2012
comment
ฉันคงอธิบายไม่ถูก แบบสอบถามที่ใช้ฟังก์ชันที่ผู้ใช้กำหนดหรือฟังก์ชัน Access จะไม่ทำงานภายนอก MS Access ถ้าคุณสร้างอินสแตนซ์ของ Access คุณสามารถเรียกใช้แบบสอบถามใน Access ได้ ไม่ใช่สิ่งที่คุณต้องการ - 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

นี่คือสิ่งที่ฉันต้องการ มันทำงานได้ดีหากไม่มีการบล็อกสคริปต์หรือมิฉะนั้นสคริปต์จะถูกลงนามและฐานข้อมูลยอมรับลายเซ็น มันให้ผลลัพธ์แบบ 2 มิติแก่ฉัน และให้ฉันใช้ฟังก์ชันตามสคริปต์ได้

person bugmagnet    schedule 26.10.2012