# Visual Basic 6 dan MySQL/MariaDB


_Bismillah Alhamdulillah._

Artikel ini dibuat sekadar untuk mengenang bagaimana dahulu **_Visual Basic 6_ (_VB6_)** merupakan salah satu pemrograman berbasis _Graphical User Interface_ (GUI) yang cukup populer dan andal di masa jayanya. Visual Basic (juga disebut sebagai _Classic Visual Basic_) adalah bahasa pemrograman _event-driven_ (berbasis kejadian) generasi ketiga dari _Microsoft_ yang dikenal dengan model pemrograman _Component Object Model_ (COM) yang pertama kali dirilis pada tahun 1991 dan dinyatakan sebagai warisan pada tahun 2008 [¹](https://en.wikipedia.org/wiki/Visual_Basic_(classic)). Walaupun **_VB6_** sudah dijadikan warisan oleh _Microsoft_, namun masih dapat digunakan di sistem operasi _Windows 11_ [²](https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy).

Untuk mengakses aplikasi database di luar pemrograman **_VB6_**, biasanya melalui suatu penghubung yang disebut **_Open Database Connectivity_ (_ODBC_)**. Namun, dalam tutorial kali ini saya tidak akan menggunakan **_ODBC_** sebagai penghubung, melainkan **_VBMySQLDirect_** yang saya rasa lebih mudah penggunaannya. **_VBMySQLDirect_** adalah sebuah pembungkus MySQL C API yang ditulis oleh seorang kontributor dalam proyek _VB-MySQL_ bernama Robert Rowe pada tahun 2001.

> **_VBMySQLDirect_** adalah cabang dari MyVbQl API dan tersedia untuk pengembang Visual Basic dan semua pengembang Windows yang memiliki akses ke objek COM. **_VBMySQLDirect_** menawarkan peningkatan kinerja melalui ODBC, dan juga menawarkan peningkatan dari API MyVbQl sebelumnya dalam hal manajemen memori yang lebih baik, dukungan BLOB, dan kompatibilitas ADO yang lebih baik. **_VBMySQLDirect_** menggunakan API MySQL yang lebih baru sebagai basisnya juga dan karenanya mendukung fungsionalitas yang lebih baru daripada MyVbQl [³](https://marc.info/?l=mysql-win32&m=107886479703458&w=2).

Dalam artikel ini akan dibagi dalam beberapa tahap, yaitu:

1.  Instalasi fail _library_ **_VBMySQLDirect_**
2.  Penerapan pemanggilan _API_ di **_VB6_**
3.  Contoh penerapan uji koneksi dalam _GUI_ versi kustom
4.  Contoh aplikasi membaca data

Dalam pembuatan artikel ini beberapa hal penting yang harus disiapkan adalah:

*   **_VB6_** sudah dipasang. Saat ini saya menggunakan **_VB6_** versi **_SP6_**. Yang ingin melakukan instalasi di _Windows 10_ (atau _Windows 11_) ikuti tutorial di [sini](https://www.fortypoundhead.com/showcontent.asp?artid=23993).
*   [_MySQL_](https://www.mysql.com/) atau [_MariaDB_](https://mariadb.org/) sudah dipasang dengan benar di sistem operasi _Windows_ (saat ini saya menggunakan **_Windows 11_**). Dapat juga menggunakan aplikasi versi terintegrasi seperti [**_WAMP_**](https://www.wampserver.com/en/).

### 1\. Instalasi fail library VBMySQLDirect

Fail _library_ **_VBMySQLDirect_** berupa fail **_.dll_** yang harus diregistrasikan terlebih dahulu ke sistem operasi _Windows_ sebelum dapat dipakai. _DLL_ adalah singkatan dari _Dynamic-Link Library_. _DLL_ adalah fail _library_ dalam sistem operasi _Windows_ yang berisi “arahan” untuk program lain dalam melakukan suatu pekerjaan. Fail ini bernama **_VBMySQLDirect.dll_** yang dapat diunduh di _repository github_ saya. Langkah selanjutnya adalah sebagai berikut.

*   Letakkan fail **_VBMySQLDirect.dll_** di sebuah direktori,
*   Buka _command prompt_ (jalankan sebagai **_Administrator_**),
*   Eksekusi perintah registrasi berikut hingga muncul notifikasi sukses.

> regsvr32 "nama\_dan\_alamat\_fail\_dll"

Berikut ini contoh potongan gambar hasil registrasi yang sudah berhasil.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796948803/I5cMSEKQ9.png)

---

### 2\. Penerapan pemanggilan _API_ di **_VB6_**

_Application Programming Interface_ (**_API_**) atau antarmuka pemrograman aplikasi adalah sekumpulan definisi dan protokol untuk membangun dan mengintegrasikan perangkat lunak aplikasi. **_API_** memungkinkan sebuah produk atau layanan dapat berkomunikasi dengan produk dan layanan lain tanpa harus mengetahui bagaimana cara penerapannya.

Sebelum menggunakan _API_ **_VBMySQLDirect_** ini, yang harus dilakukan pertama kali adalah memuatkan referensi ke fail _library_ bersangkutan. Caranya adalah:

a. Buka IDE VB6, pilih **_Standard Exe_**, dan tekan tombol **_Open_**.  
b. Simpan **_project_** (dan _form_ baru) di folder yang dikehendaki.

> tambahkan fail **_libmySQL.dll_** di setiap folder _project_ yang dimiliki.

Jika mengalami _error_ terkait belum terdeteksinya fail _libmySQL.dll_, silakan _project_\-nya ditutup dahulu, dan dibuka lagi.

c. Dalam menu tab **_Project_**, pilih submenu **_References_**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796950393/hqEtkiTDM.png)

d. Geser ke bawah hingga menemukan **_VB MySQL Direct v1.0_**, dan centang. Kemudian, klik tombol **_OK_**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796951878/OYXg5f6b4.png)

Untuk mengetahui ada _API_ apa saja di _library_ **_VBMySQLDirect_** dapat membuka menu **_View > Object Browser_**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796953431/i98EvLmWY.png)

Untuk membuat koneksi baru dapat menggunakan _class_ **_MYSQL\_CONNECTION_** sekaligus dilakukan inisialisasi _variable_ baru.
```
Dim koneksi As MYSQL_CONNECTION  
Set koneksi = New MYSQL_CONNECTION
```
Parameter koneksi dapat dilihat pada fungsi **_OpenConnection_** sebagai berikut.
```
Function OpenConnection([sHostName As String], [sUserName As String], [sPassword As String], [sDbName As String], [lPortNum As Long = 3306]) As MYSQL_CONNECTION_STATE
```
Contoh pengunaannya adalah sebagai berikut.
```
Const host = "localhost"  
Const user = "root"  
Const passw = ""  
Const port = 3306

' parameter setelah _passw_ dan sebelum _port_ adalah nama database  
' dapat dikosongkan  
koneksi.OpenConnection host, user, passw, , port
```
Hasil koneksi adalah status **_MY\_CONN\_OPEN_** jika tersambung atau **_MY\_CONN\_CLOSED_** jika tertutup. Dan jika koneksi tidak berhasil dilakukan akan otomatis membangkitkan pesan kesalahan yang sesuai dengan jenis kesalahan yang sudah terinventarisasi di _class_ **_MYSQL\_ERR_**.

Eksekusi perintah (_query_) dapat dilakukan melalui fungsi **_Execute_**. Misalnya dalam perintah berikut:
```
Dim status  
Dim isi  
Set status = koneksi.Execute("SELECT version()")  
isi = status.GetString(, "")
```
_Variable_ **status** menyimpan hasil eksekusi _query_ “**_SELECT version()_**” yang digunakan untuk mengetahui versi _database_ (_MySQL_/_MariaDB_) yang digunakan. Dan _variable_ **isi** melalui fungsi **_GetString_** mengambil hasil eksekusi berupa data _string_.

Dan terakhir untuk menghapus _object_ koneksi dari memori adalah dengan menyetel “**_Set koneksi = Nothing_**”.

d. Sebelum memasukkan kode di _form code_, di mode **_Design_** disiapkan dahulu satu buah tombol dengan nama _default_ **_Command1_**, _caption_ misalnya “**_Tes Koneksi_**”.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796955039/sw3L-wsM2.png)

e. Lakukan klik ganda pada area _form_ atau tombol, dan lengkapi kodenya.

Kode sumber lengkapnya adalah sebagai berikut.

%[https://gist.github.com/galihboy/267b82956f90d20be32fbe9e33f8497d#file-vb6_mysql_01-frm]

Hasil eksekusi dengan mengubah _port_ **3306** (_MySQL_) dan **3307** (_MariaDB_) adalah sebagai berikut.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796956483/UMF12GIbM.png)

Berikut contoh tampilan kalau _password_ diisi “_abc_” (data salah) dimana seharusnya kosong.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796957978/uw8oMYlE5.png)

Jika Anda lupa port number dari _MySQL_ atau _MariaDB_, silakan buka **_mysql_**/**_mariadb_** _console_ (_command line client_) dan setelah berhasil _login_, ketikkan perintah “**_status_**”. Berikut contoh tampilannya.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796959839/m8O4jhTZG.png)

---

### 3\. Contoh penerapan uji koneksi dalam GUI versi kustom

Dalam antarmuka yang akan dibuat ini terdapat empat fungsional utama, yaitu (1) tes koneksi, (2) menampilkan database, (3) menampilkan tabel dari database yang dipilih, dan (4) menampilkan atribut dari tabel yang dipilih.

Kode untuk fungsional tes koneksi menyerupai kode sebelumnya, hanya saja data masukan parameter diambil dari _textbox_ yang menerima masukan dari pengguna. Untuk fungsional menampilkan database, dengan membangkitkan kode untuk _list database_ dari server yang sedang terhubung. Data berupa _list_ yang disimpan dalam _listbox_. Untuk fungsional menampilkan data tabel dipengaruhi oleh data _database_ yang dipilih dalam _listbox database_. Dan terakhir untuk fungsional menampilkan tabel, dipengaruhi oleh data tabel yang dipilih pengguna dalam _listbox_ tabel. Desain antarmukan adalah sebagai berikut.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796961622/Q03KB3VUn.png)

Potongan kode utama untuk menampilkan _database_ adalah:
```
Dim MyRS As MYSQL_RS  
Dim theTemp As String, tempArray() As String  
Set MyRS = New MYSQL_RS  
Set MyRS = koneksi.Show(MY_SHOW_DATABASES)

If Not MyRS.EOF Then  
    theTemp = Trim$(MyRS.GetString(, ""))  
    If theTemp <> "" Then  
        Dim i As Integer  
        tempArray = Split(theTemp, vbCrLf)  
        For i = LBound(tempArray) To UBound(tempArray) - 1  
            lstDatabase.AddItem tempArray(i)  
        Next  
    End If  
End If
```

Potongan kode utama untuk menampilkan tabel dari suatu _database_ adalah:
```
Dim MyRS As MYSQL_RS  
Dim theTemp As String, tempArray() As String  
          
Set MyRS = New MYSQL_RS  
Set MyRS = koneksi.Show(MY_SHOW_TABLES)

If Not MyRS.EOF Then  
    theTemp = Trim$(MyRS.GetString(, ""))  
    If theTemp <> "" Then  
        Dim i As Integer  
        tempArray = Split(theTemp, vbCrLf)  
        For i = LBound(tempArray) To UBound(tempArray) - 1  
            lstTabel.AddItem tempArray(i)  
        Next  
    End If  
End If
```

Dan potongan kode utama untuk menampilkan atribut dari suatu tabel adalah:
```
Set MyRS = koneksi.Execute("SELECT * FROM " & namaTabel)  
If Not MyRS.EOF Then  
    Dim i As Integer  
    For i = 0 To MyRS.FieldCount - 1  
        lstAtribut.AddItem MyRS.Fields(i).Name  
    Next i  
End If
```

Hasil akhir setelah eksekusi program adalah sebagai berikut.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796963055/kNUzkQyDU.png)

---

### 4\. Contoh aplikasi membaca data

Pada bagian ini akan membahas cara membaca data dari suatu tabel disertai fitur pencarian data. Dimana pencarian data akan dilakukan pembandingan antara nilai masukan (data yang dicari) dengan semua atribut dalam tabel yang dipilih. Jadi jika diumpamakan terdapat parameter masukan dengan nilai “abc”. Maka _string_ SQL secara keseluruhan adalah:
```
SELECT atribut1, atribut2, dst  
FROM namaTabel  
WHERE atribut1 LIKE "%abc%" OR atribut2 LIKE "%abc%" OR dst...
```
Hasil pencarian sementara ini hanya disimpan dalam sebuah komponen _textbox_ dimana data yang ditemukan akan disusun secara vertikal. Untuk tutorial lanjutan akan disertakan penyajian data dalam bentuk tabel menggunakan komponen **_listview_**.

Berikut ini contoh hasil eksekusi program disertai pencarian data.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796964815/ZWbhArJdD.png)

Untuk selanjutnya akan dibuatkan tutorial penerapan aplikasi CRUD.

Semoga Bermanfaat.


Terima kasih.

---

Kode sumber dapat diperoleh di github.

%[https://github.com/galihboy/VB6_MySQL]

[**Website**](https://galih.eu/) **·** [**Github Pages**](https://galihboy.github.io/) **·** [**Demo Mini Projects**](https://galihboy.github.io/mini_projects/)

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1636796966292/TMdeZQn75.gif)
