07 Mei 2008

Akses Database Mysql dengan Visual Basic


MySQL merupakan database yang cukup handal dan seringkali digunakan pada beberapa aplikasi berbasis web umumnya bergandeng tangan dengan PHP. Meski cukup minimal dibanding sistem database besar seperti Oracle atau MS SQL Server, tetapi MySQL jauh lebih baik ketimbang database MS Access dari segi performance.

Umumnya VB dikaitkan dengan database yang berplatform produsen sama yakni sama-sama Microsoft seperti MS Access dan MS SQL Server. Dalam sebuah kasus, sistem web base dengan database MySQL, dan hendak dilengkapi dengan sebuah aplikasi dekstop yang terintegrasi dengan system web base tersebut. Maka sudah tak bisa ditawar database tetap dipertahankan sedangkan aplikasi baru harus mampu mengintegrasikan diri dengan aplikasi yang sudah ada.

Berikut kode sumber untuk pengaksesan database Mysql dalam VB yang dirangkum dalam satu modul tersendiri agar dapat diakses secara global pada semua form aktif. Sebelumnya harus di-add ke dalam reference library MySQL (MySQLLib.dll) yang bisa didapatkan dari installer MySQL.

'deklarasi variable publik

Public uID$
Public Pwd$
Public Host$
Public Port$
Public DBName$
Public Conn As New MySqlConnection
Public rs As New MySqlRecordset

'prosedur inisialiasi variabel koneksi

Public Sub InitVarDB(Server As String, _
Database As String, _
UserID As String, Passwd As String)
uID = UserID
Pwd = Passwd
Host = Server
DBName = Database

End Sub

'prosedur inisialiasi koneksi

Public Sub InitDB(Optional opsi As String)

'opsi pengaturan setting koneksi pada File INI

If opsi = "" Then
Dim filePath$
filePath = App.Path & "\Setting.ini"
'server
Host = GetIniValue(filePath, "DATABASE", "SERVER")
Port = GetIniValue(filePath, "DATABASE", "PORT")
DBName = GetIniValue(filePath, "DATABASE", "DBNAME")
uID = GetIniValue(filePath, "DATABASE", "USERID")
Pwd = GetIniValue(filePath, "DATABASE", "PASSWD")
End If

On Error GoTo ErrorTrack

Call CloseDB
Set Conn = New MySqlConnection

With Conn
.ServerAddress = Host
.USERNAME = uID
.PASSWORD = Pwd
End With

Conn.Connect

Conn.UseDatabase DBName


ErrorTrack:
If Err.Number <> 0 Then
Set Conn = Nothing
Dim error_message$
error_message = "Login database gagal "
If Err.Number = 370 Then
error_message = "Rekord gagal dibuka"
ElseIf Err.Number = -2147467259 Then
error_message$ = "Server Database tidak ditemukan atau akses ditolak "
ElseIf Err.Number = -2147217843 Then
error_message = "User ID atau password salah "
End If

MsgBox error_message & vbCrLf & " State : " & State & _
vbCrLf & "Kode Error : " & Err.Number & _
vbCrLf & "( " & Err.Description & " )" & vbCrLf & vbCrLf & _
"Segera hubungi Administrator !!!", vbCritical, "Error Server Log"

Exit Sub

End If


End Sub

'prosedur penutupan DB

Public Sub CloseDB()
If Conn.Status = statusConnected Then
Conn.CloseConnection
Set Conn = Nothing
End If
End Sub

'prosedur penutupan Recordset

Public Sub CloseRs()
On Error GoTo ErrorTrack
rs.CloseRecordset
ErrorTrack:
If Err.Number <> 0 Then
MsgBox error_message & vbCrLf & " State : " & State & _
vbCrLf & "Kode Error : " & Err.Number & _
vbCrLf & "( " & Err.Description & " )" & vbCrLf & vbCrLf & _
"Segera hubungi Administrator !!!", vbCritical, "Error Server Log"
Exit Sub
End If

End Sub

'fungsi perhitungan jumlah Recordset

Public Function CountRs(Optional SQL As String, Optional ByRef recSet As MySqlRecordset) As Integer

On Error GoTo ErrorTrack:
CountRs = 0

If SQL <> "" Then
OpenRs (SQL)
CountRs = rs.RecordCount
ElseIf Not recSet.EOF Then
CountRs = recSet.RecordCount
End If

ErrorTrack:
If Err.Number <> 0 Then
Dim error_message$
error_message = "Hitung berkas gagal"

MsgBox error_message & vbCrLf & " State : " & State & _
vbCrLf & "( " & Err.Description & " )" & vbCrLf & vbCrLf & _
"Segera hubungi Administrator !!!", vbCritical, "Error Record Log"

CountRs = 0
Exit Function
End If

End Function

'prosedur pembukaan Recordset

Public Sub OpenRs(SQL As String)
On Error GoTo ErrorTrack
Call CloseRs
If Conn.Status = statusDisconnected Then Conn.Connect
rs.OpenRecordset SQL, Conn
ErrorTrack:
If Err.Number <> 0 Then
Dim error_message$
error_message = "Akses berkas gagal"
If Err.Number = 370 Then
error_message = "Berkas gagal dibuka"
ElseIf Err.Number = 3704 Then
error_message = "Berkas gagal dibuka"
End If

MsgBox error_message & vbCrLf & " State : " & State & _
vbCrLf & "Kode Error : " & Err.Number & _
vbCrLf & "( " & Err.Description & " )" & vbCrLf & vbCrLf & _
"Segera hubungi Administrator !!!", vbCritical, "Error Record Log"
Exit Sub

End If
End Sub

'prosedur idle time

Public Sub Handled()
Do Until Conn.Status = statusConnected
DoEvents
Loop
End Sub

'prosedur execute SQL
'umumnya digunakan untuk operasi yang tidak meminta pengembalian recordset
'contoh: INSERT, UPDATE, DELETE dan TRUNCATE

Public Sub SQLProc(SQL As String)

On Error GoTo ErrorTracking
Debug.Print SQL
Conn.Execute SQL
Call Handled

ErrorTracking:
If Err.Number <> 0 Then

Dim error_message$
error_message = "Proses query gagal "

If Err.Number = -2147217873 Then
error_message = "Duplikasi kode primer "
ElseIf Err.Number = -2247217900# Then
error_message = "Nama field tidak dikenal "
ElseIf Err.Number = -2147217833 Then
error_message = "Isian melebihi batas kapasitas field "
End If

MsgBox error_message & vbCrLf & " State : " & State & _
vbCrLf & "Kode Error : " & Err.Number & _
vbCrLf & "( " & Err.Description & " )" & vbCrLf & vbCrLf & _
"Segera hubungi Administrator !!!", vbCritical, "Error Query"
Exit Sub
End If

End Sub



Contoh penggunaan:

inisialiasi DB
Call InitVarDB("localhost","SMS","root","123456")
Call InitDB("custom")
Akses recordset
SQL="SELECT * FROM INBOX"
Call OpenRS(SQL)

Akses Execute SQL No Recordset
SQL="UPDATE Sent='Now' WHere ID=1"
Call SQLPRocedure(SQL)

Semoga membantu. GoodLuck!

1 komentar:

Bali TentHood mengatakan...

Bagai mana kalu databasenya dari web yang online bukan dari localhost??