Skip to main content

VBA Access Menggunakan Sistem 32-Bit dan 64-Bit

Access yang merupakan produk dari MS Office secara umum dapat dijalankan pada sistem 32-bit. Namun demikian, sejalan dengan semakin kompleksnya perhitungan, Microsoft selaku pemilik Office meningkatkan kemampuannya ke sistem 64-bit. Hal ini dilakukan sejak Office 2010.
Gambar 1. Pesan kesalahan di VBA Access 64-bit (VBA7)

Dengan demikian, sejak Office 2010, Access telah mengadopsi sistem 64-bit. Di sisi lain, sistem 32-bit masih digunakan. Dengan dua sistem yang berbeda ini, dalam pelaksanaannya, semua aplikasi Office yang berhubungan dengan penulisan kode VBA mengalami hambatan.

Jika kode VBA akan dijalankan pada Access 2010 ke atas dan ingin menghindari masalah bila ada pengguna yang mempunyai (atau memasang) Access 64-bit, maka sebaiknya kita harus memastikan bahwa kode VBA itu menggunakan VBA versi 7 (VBA7). Untuk diketahui, Access 2010 ke bawah menggunakan VBA versi 6 (VBA6), yang menggunakan sistem 32-bit.

Menjalankan kode VBA yang ditulis dengan VBA6 pada Office dengan sistem 64-bit dapat mengakibatkan munculnya kesalahan jika kode VBA itu tidak dimodifikasi untuk mengikuti sistem 64-bit, seperti tampak pada Gambar 1 di atas. Kesalahan terjadi karena VBA6 dan versi sebelumnya hanya digunakan untuk sistem 32-bit dan umumnya berisi deklarasi yang memanggil Windows API atau library menggunakan tipe data yang masih berada di sistem 32-bit. Di sisi lain, Access 2010 telah mengadopsi VBA7. Dengan demikian kode VBA yang ditulis dengan menggunakan VBA6 harus dirubah menyesuaikan diri dengan VBA7.

Perubahan yang dilakukan hanya mempengaruhi sebagian kode yang menggunakan WIN API untuk memanipulasi library sistem operasi Windows. Saat membuat aplikasi database Access 2007 ke bawah, kita mungkin sudah terbiasa menulis kode menggunakan VBA6. Namun, saat dijalankan di Access 2010 ke atas (yang sudah menggunakan VBA7), kode itu tidak berfungsi sebagai mana mestinya, karena Access 2010 ke atas memerlukan identifikasi, apakah kode itu telah sesuai dengan sistem 64-bit atau tidak.

Untuk mengatasi masalah ini dan untuk memungkinkan kode VBA dapat berfungsi di lingkungan sistem 32-bit dan 64-bit, beberapa istilah bahasa baru diperkenalkan di VBA7. Ada tiga istilah bahasa utama yang diperkenalkan yaitu LongPtr untuk penamaan tipe (type alias), LongLong untuk tipe data, dan PtrSafe untuk atribut atau keyword.
  • LongPtr, merupakan nama lain dari tipe data sesungguhnya. Tipe data sesungguhnya yang bisa dijalankan tergantung dari versi Office/Access yang diaplikasikan. LongPtr akan dibaca ke Long pada Office/Access dengan sistem 32-bit dan akan dibaca ke LongLong pada Office dengan sistem 64-bit.
  • LongLong, tipe data long integer yang digunakan pada sistem 64-bit Office/Access. Tipe data ini harus dinyatakan secara tersurat untuk memastikan bahwa sistem pada Access yang diaplikasikan menggunakan sistem 64-bit.
  • PtrSafe, merupakan atribut yang menunjukkan bahwa pernyataan deklarasi dapat dijalankan secara aman di sistem 64-bit.
Semua pernyataan deklarasi pada sistem 64-bit diharuskan menggunakan atribut PtrSafe untuk menyatakan bahwa kode VBA bisa digunakan di sistem itu. Tujuannya, supaya Access (lebih tepatnya VBA pada Access) dapat mengerti bahwa sistem yang digunakan adalah 64-bit.

Pada Access 2010 ke atas - yang sudah menggunakan VBA7 - untuk menuliskan pernyataan deklarasi yang berhubungan dengan Windows (misalnya memanggil shell32.dll, user32.dl, dan lain-lain), atribut PtrSafe wajib digunakan.

Nah, persoalan yang muncul adalah, pernyataan deklarasi yang ditulis dengan VBA Access 2010 ke atas tidak bisa diaplikasikan ke VBA Access 2007 ke bawah. Sebaliknya hal yang sama juga terjadi, pernyataan deklarasi yang ditulis dengan VBA Access 2007 ke bawah tidak bisa diaplikasikan ke VBA Access 2010 ke atas. Oleh karena itu, kita harus memodifikasi pernyataan deklarasi dengan menambahkan #If VBA7 then pada bagian deklarasi sebagai berikut:
#If VBA7 Then 
  Declare PtrSafe Sub... 
#Else 
  Declare Sub... 
#EndIf
Untuk lebih mudah memahami, kita dapat menggunakan contoh kasus berikut ini. Pemrogram menuliskan deklarasi pada Access 2007 (atau VBA6) ke bawah sebagai berikut.

VBA6:
Private Declare Function GetTempPathA Lib "kernel32" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Tetapi, bila dijalankan di Access 2010 (atau VBA7) ke atas, saat dijalankan, VBA akan menampilkan pesan kesalahan:

Compile Error:

The code in this project must be updated for use in 64-bit systems. Please review and update Declare statements and then mark them with the PtrSafe attribute

Seperti pada Gambar 1 di atas.

Untuk mengatasi masalah itu, kita diminta menambahkan atribut PtrSafe pada bagian Declare, atau secara lengkap, penulisannya adalah sebagai berikut:

VBA7:
Private Declare PtrSafe Function GetTempPathA Lib "kernel32" _
(ByVal nBufferLength As LongPtr, _
ByVal lpBuffer As String) As Long
Pada waktu lain, ada pemrogram menuliskan deklarasi pada Access 2010 (atau VBA7) ke atas seperti pada VBA7. Tetapi, bila dijalankan di Access 2007 (atau VBA6) ke bawah, saat dijalankan, VBA akan menampilkan pesan kesalahan:

Compile Error:

Expected: Sub or Function

yang mengindikasikan bahwa atribut PtrSafe tidak dikenali oleh VBA6.

Untuk menyelesaikan masalah yang muncul saat pernyataan dideklarasikan di VBA6 atau VBA7, kita menggunakan #If VBA7 then seperti di atas. Kita harus memodifikasi pernyataan deklarasi supaya kedua deklarasi ini bisa dijalankan, baik di VBA6 maupun VBA7, tanpa menimbulkan kesalahan, caranya sebagai berikut:
#If VBA7 Then 
'VBA7:
  Private Declare PtrSafe Function GetTempPathA Lib "kernel32" _
  (ByVal nBufferLength As LongPtr, _
  ByVal lpBuffer As String) As Long 
#Else 
  Private Declare Function GetTempPathA Lib "kernel32" _
  (ByVal nBufferLength As Long, _
  ByVal lpBuffer As String) As Long 
#EndIf
Secara ringkas, supaya kode VBA bisa berfungsi di sistem 64-bit, kita harus menempatkan dan memodifikasi pernyataan deklarasi dengan menambahkan atribut PtrSafe. Lebih jauh, kita juga harus memodifikasi tipe data yang menjadi referensi dan menggunakan atribut PtrSafe itu dengan mengubah tipe data itu, dari Long, menjadi LongPtr, seperti terlihat pada "ByVal nBufferLength As LongPtr" di VBA7 di atas. Selain itu, kita juga harus memodifikasi semua variabel yang berhubungan dengan tipe data LongPtr supaya kode VBA dapat dijalankan, baik di VBA6 maupun VBA7.

Menulis kode yang bisa berfungsi di Access dengan sistem 32-bit maupun 64-bit

Untuk menulis kode yang bisa berfungsi, baik di sistem 32-bit maupun 64-bit, kita hanya perlu menggunakan tipe data alias LongPtr sebagai pengganti Long atau LongLog untuk setiap nilai pointer. Tipe data alias LongPtr akan berubah menjadi tipe data Long atau LongLong tergantung pada versi Office Access yang diinstall. Jadi misalnya, Office yang diinstal menggunakan sistem versi 64-bit, maka kita dapat menambahkan #if VBA7 then untuk sistem 64-bit. Untuk diketahui, sistem 64-bit hanya ada di Office 2010 ke atas (VBA7). Jadi, cara menambahkan sistem 64-bit ini adalah sebagai berikut:
#if VBA7 then 
'  Kode yang dijalankan menggunakan VBA7 
     #if Win64 then 
     '  Kode yang dijalankan menggunakan Office/Acccess 64-bit 
     #else 
     '  Kode yang dijalankan menggunakan Office/Access 32-bit 
     #end if 
#else
'  Kode yang dijalankan menggunakan VBA6 ke bawah 
#end if
Dengan mengaplikasikan pernyataan #if VBA7 then di atas, maka kita tidak perlu membuat dua aplikasi yang berbeda untuk Access 2007 ke bawah dan Access 2010 ke atas. Bila dikompilasi menjadi file dengan ekstensi accde, kode VBA itu juga bisa langsung digunakan.

Comments

  1. Langkah2 untuk edit?. File apa yang akan di edit ?

    ReplyDelete
    Replies
    1. Di modul, biasanya yang terkait langsung dengan file library yang berekstensi .dll, .drv dan lain-lain di folder OS Windows, contohnya: "shell32.dll", terus ada juga "kernel32", dan "winspool.drv".

      Delete
  2. dengan penjelasan yang lebih sederhana agar dapat lebih mudah dimengerti, bagaimana cara membuka file dengan format accdb (32bit) pada windows 10 SL (64bit/accde)?

    ReplyDelete

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access