Di Access 2010 VBA, jika saya menjalankan sub ini:
sub test
Dim db
Dim rst
Set db = CurrentDb()
Set rst = db.OpenRecordset("select * from mytable")
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
kemudian muncul (di panel "Menengah"):
db: Database
rst: Recordset2
jadi berfungsi, dan semua perpustakaan diinstal dengan benar (ADO misalnya).
Oke, sekarang saya ingin mendeklarasikan tipe variabel secara eksplisit, dengan menggunakan tipe yang ditampilkan ("Database" dan "Recordset2"), jadi saya memodifikasi subnya dengan cara ini:
sub test
Dim db as Database ' explicitly
Dim rst as Recordset2 ' explicitly
Set db = CurrentDb()
Set rst = db.OpenRecordset("select * from mytable")
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
dan ketika saya menjalankannya, saya mendapatkan kesalahan berikut pada baris "Redupkan db sebagai Database":
Compilation error:
User defined type is not defined
Jadi saya mengerti bahwa tipe "Database" tidak ditentukan (!). Mengapa?
Catatan: Saya juga sudah mencoba:
Dim db as ADO.Database ' explicitly
Dim rst as ADO.Recordset2 ' explicitly
Dan:
Dim db as ADODB.Database ' explicitly
Dim rst as ADODB.Recordset2 ' explicitly
Dan:
Dim db as DAO.Database ' explicitly
Dim rst as DAO.Recordset2 ' explicitly
dan mendapatkan kesalahan yang sama dengan semuanya. Bagaimana itu mungkin? Mengapa ini berhasil jika saya tidak mendeklarasikan tipenya?
Edit: Saya baru saja mengetahui bahwa Access juga menawarkan objek ADODB.Connection untuk database saat ini, dengan memanggil "CurrentProject.Connection". Jadi saya dapat secara eksplisit menyatakan:
sub test
Dim db As ADODB.Connection
Set db = CurrentProject.Connection ' Access gives an ADODB object too!
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "select * from mytable", db
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
pertunjukan itu:
db: Connection
rst: Recordset
Jadi saya akan menggunakannya, karena ADO lebih modern dari DAO.