Membuat CRUD Database Menggunakan Visual Basic ( Bagian 1 )

Selamat malam sobat indonesia, khusus untuk programmer veteran kali ini saya akan membagikan bagaimana mudahnya membuat CRUD Database menggunakan Visual Basic 6. Meskipun tergolong bahasa pemrograman yang cukup tua, namun pemrograman visual basic 6 masih banyak peminatnya, karena memang sangat ringan jika dijalankan di dalam sistem operasi windows.

Cara ini saya temukan disalah satu group programer di Indonesia. Class Database ini dibuat oleh seorang programer dan saya hanya membagikan untuk pembaca disini, semoga artikel ini bermanfaat kedepannya untuk anda.
Fungsi dari class ini adalah untuk koneksi database, menyimpan data, update data, dan hapus data serta fungsi SQL lainnya. Apabila kita tidak menggunakan class untuk proses crud databasenya mungkin akan terlalu banyak text perintah SQL yang akan kita ketik. Contoh misalnya jika kita mau melakukan perintah menyimpan data ke database maka kita harus nulis perintah SQL tersebut didalam program yang kita buat yaitu SQL simpan :

sql = "INSERT INTO tblbarang(kodebarang,namabarang,harga) VALUES( " & _ 
"'" & txtKodeBarang.Text & "'," & _ 
"'" & txtNamaBarang.Text & "'," & _ 
"'" & txtHarga.Text & "')" 
DB.Execute sql

Sedangkan kalau kita menggunakan fungsi class yang kita buat nantinya, maka akan lebih mudah dalam proses simpannya yaitu :

strTable = "tblbarang"

dtFields(0) = "kodebarang"
dtFields(1) = "namabarang"
dtFields(2) = "harga"

dtValues(0) = Trim(Me.txtKodeBarang.Text)
dtValues(1) = Trim(Me.txtNamaBarang.Text)
dtValues(2) = Trim(Me.txtHarga.Text)

.RunQueryInsert strTable, dtFields, dtValues

Proses simpan diatas dapat berjalan setelah kita deklarasikan strTable, dtFields, dan dtValues nya. Kita tidak perlu lagi menuliskan perintah SQL INSERT INTO, biasanya kalau kita tidak menggunakan fungsi class sering kali terjadi kesalahan perintah simpan dan update data pada titik koma. Oleh karena itu lebih efektif menurut saya jika kita membuat fungsi class CRUD database, dilihat juga lebih rapi untuk cara ngodingnya, langsung saja. 1. Kita buat classModule dan beri nama “clsDB”, tuliskan code dibawah ini dalam “clsDB ” tersebut :

Option Explicit
'Programmed by Agung Novian
'pujanggabageur@yahoo.com
'www.diajar.com

Private Declare Function GetShortPathName _
   Lib "kernel32" Alias "GetShortPathNameA" ( _
   ByVal lpszLongPath As String, _
   ByVal lpszShortPath As String, _
   ByVal cchBuffer As Long) As Long

   Private myConnection As ADODB.Connection
   Private WithEvents myRecordSet As ADODB.RecordSet
   Private myQuery As String
   Private blnErr As Boolean
   Private myIsConnect As Boolean
   Private myIsRun As Boolean
   Private lngRecordCount As Long
   Private lngRecordPos As Long
   Private myConnectionString As String

   Private strDBPath As String
   Private strDBName As String
   Private strDBPassword As String
   Private strDBServer As String
   Private strDBPort As String
   Private strDBUserName As String
   Private strErr As String

   Private strDSN As String

Enum tDatabase
   dbDSN = 0
   dbAcces2003 = 1
   dbAcces2007 = 2
   dbSQLServer = 3
   dbMySQL = 4
   dbFirebird = 5
End Enum

Private myDBType As tDatabase

Private Function GetShortPath(strFileName As String) As String
   Dim lngRes As Long
   Dim strPath As String
   strPath = String$(165, 0)
   lngRes = GetShortPathName(strFileName, strPath, 164)
   GetShortPath = Left$(strPath, lngRes)
End Function

Public Function ConnectDB() As Boolean
   On Error GoTo YourMama
   ConnectDB = False

   If myConnectionString = "" Then Exit Function

    Set myConnection = New ADODB.Connection
    myConnection.Open myConnectionString

    IsConnect = True
    ConnectDB = True
  Exit Function

  YourMama:
  Dim lngErrorNumber As Long
  strErr = "Err " & CStr(Err.Number) & ": " & Err.Description
  IsConnect = False
  Exit Function
End Function

Function GetErrorResult(Description As String, Optional strErr As String) As String
   Dim intCari As Integer
   Dim lngReturn As Long

   blnErr = True

   intCari = InStr(1, Description, "unknown database", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 1
     strErr = "Error " & lngReturn & ": " & "Periksa nama database"
   End If

   intCari = InStr(1, Description, "access denied for user", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 2
     strErr = "Error " & lngReturn & ": " & "Periksa nama user & pass"
   End If

   intCari = InStr(1, Description, "unknown mysql server", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 3
     strErr = "Error " & lngReturn & ": " & "Periksa nama server"
   End If

   intCari = InStr(1, Description, "can't connect to mysql server", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 4
     strErr = "Error " & lngReturn & ": " & "Periksa port server/mysql service"
   End If

   intCari = InStr(1, Description, "data source name not found", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 5
     strErr = "Error " & lngReturn & ": " & "Periksa nama DSN"
   End If

   intCari = InStr(1, Description, "table", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 6
     strErr = "Error " & lngReturn & ": " & "Periksa nama tabel"
   End If

   intCari = InStr(1, Description, "unknown column", vbTextCompare)
   If intCari <> 0 Then
     lngReturn = 7
     strErr = "Error " & lngReturn & ": " & "Periksa nama tabel"
   End If

   GetErrorResult = strErr
   Exit Function
End Function

Function OpenConnection() As Boolean
  On Error GoTo YourMama
  Set myRecordSet = New ADODB.RecordSet

  With myRecordSet
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
  End With

  myRecordSet.Open Query, myConnection
    IsRun = True
    OpenConnection = True
Exit Function

  YourMama:
  Dim lngErrorNumber As Long
   strErr = "Err " & CStr(Err.Number) & ": " & Err.Description
   Set myRecordSet = Nothing
   IsRun = False
   OpenConnection = False
   Exit Function
End Function

Private Function GetConnectionString() As String
Dim strConnection As String
Dim strDBPathFull As String
Dim strProvider As String

If myDBType = dbAcces2003 Then
strProvider = "Microsoft.Jet.OLEDB.4.0"
ElseIf myDBType = dbAcces2007 Then
strProvider = "Microsoft.ACE.OLEDB.12.0"
End If

If Right(strDBPath, 1) = "\" Then
strDBPath = Mid(strDBPath, 1, Len(strDBPath) - 1)
End If

strDBPath = strDBPath & "\"

Select Case myDBType
Case 0
strConnection = "dsn=" & strDSN
Case 1, 2
strDBPathFull = strDBPath & strDBName
If strDBPassword = "" Then
strConnection = "Provider=" & strProvider & ";" & _
"Data Source=" & strDBPathFull & _
";Persist Security Info=False;"
Else
If strDBUserName = "" Then
strConnection = "Provider=" & strProvider & ";" & _
"Data Source=" & strDBPathFull & _
";Persist Security Info=False;Jet OLEDB:" & _
"Database Password=" & strDBPassword
Else
strConnection = "Provider=" & strProvider & ";" & _
"Data Source=" & strDBPathFull & _
";Persist Security Info=False;Password=" & _
strDBPassword & ";User ID=" & strDBUserName
End If
End If
Case 3
If strDBServer <> "" Then
strConnection = "Provider=SQLOLEDB;Data Source=" & _
strDBServer & ";Initial Catalog=" & strDBName & _
";User Id=" & strDBUserName & _
";Password=" & strDBPassword & ";"
Else
strConnection = "Provider=SQLOLEDB" & _
";Initial Catalog=" & strDBName & _
";User Id=" & strDBUserName & _
";Password=" & strDBPassword & ";"
End If
Case 4
If strDBServer = "" Then
strDBServer = "localhost"
End If

strConnection = "DRIVER={MySQL ODBC 5.1 Driver}" & _
";SERVER=" & strDBServer & _
";PORT=" & strDBPort & _
";DATABASE=" & strDBName & _
";USER=" & strDBUserName & _
";PASSWORD=" & strDBPassword & _
";OPTION=3;"
Case 5
strDBPathFull = GetShortPath(strDBPath) & strDBName
strConnection = _
"DRIVER={Firebird/InterBase(r) driver}" & _
";DATABASE=" & strDBPathFull & _
";USER=" & strDBUserName & _
";PASSWORD=" & strDBPassword & _
";DIALECT=3;"
End Select
GetConnectionString = strConnection
End Function

Public Property Get RecordSet() As ADODB.RecordSet
Set RecordSet = myRecordSet
End Property

Public Property Let RecordSet(ByVal vNewValue As ADODB.RecordSet)
Set myRecordSet = vNewValue
End Property

Public Property Get Query() As String
Query = myQuery
End Property

Public Property Let Query(ByVal vNewValue As String)
myQuery = vNewValue
End Property

Public Property Get IsConnect() As Boolean
IsConnect = myIsConnect
End Property

Public Property Let IsConnect(ByVal vNewValue As Boolean)
myIsConnect = vNewValue
End Property

Public Property Get IsRun() As Boolean
IsRun = myIsRun
End Property

Public Property Let IsRun(ByVal vNewValue As Boolean)
myIsRun = vNewValue
End Property

Public Property Get DBType() As tDatabase
DBType = myDBType
End Property

Public Property Let DBType(ByVal vNewValue As tDatabase)
myDBType = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBPort() As String
DBPort = strDBPort
End Property

Public Property Let DBPort(ByVal vNewValue As String)
strDBPort = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBServer() As String
DBServer = strDBServer
End Property

Public Property Let DBServer(ByVal vNewValue As String)
strDBServer = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBPath() As String
DBPath = strDBPath
End Property

Public Property Let DBPath(ByVal vNewValue As String)
strDBPath = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBName() As String
DBName = strDBName
End Property

Public Property Let DBName(ByVal vNewValue As String)
strDBName = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DSN() As String
DSN = strDSN
End Property

Public Property Let DSN(ByVal vNewValue As String)
strDSN = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBUserName() As String
DBUserName = strDBUserName
End Property

Public Property Let DBUserName(ByVal vNewValue As String)
strDBUserName = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get DBPassword() As String
DBPassword = strDBPassword
End Property

Public Property Let DBPassword(ByVal vNewValue As String)
strDBPassword = vNewValue
myConnectionString = GetConnectionString
End Property

Public Property Get ConnectionString() As String
ConnectionString = myConnectionString
End Property

Public Property Get ErrQuery() As String
ErrQuery = strErr
End Property

Public Function RunQuery(Optional strQuery As String = "") As Boolean
On Error GoTo YourMama
Dim strSQL As String
Dim blnRunOK As Boolean
strSQL = IIf(strQuery = "", myQuery, strQuery)
If IsConnect Then
Query = strSQL
blnRunOK = OpenConnection
End If
RunQuery = blnRunOK
Exit Function
YourMama:
Exit Function
End Function

Public Function RunQueryDelete(strTable As String, Optional strWhere As String = "") As Boolean
On Error GoTo YourMama
Dim strSQL As String
Dim blnRunOK As Boolean

strSQL = "DELETE FROM " & strTable
If strWhere <> "" Then strSQL = strSQL & " WHERE " & strWhere

If IsConnect Then
Query = strSQL
blnRunOK = OpenConnection
End If

RunQueryDelete = blnRunOK
Exit Function
YourMama:
Exit Function
End Function

Public Function RunQueryInsert(strTable As String, _
dtFields() As Variant, dtValues() As Variant) As Boolean
On Error GoTo YourMama
Dim strSQL As String
Dim blnRunOK As Boolean

If IsConnect Then
Dim q As String
Dim v As String
Dim n As String
Dim i As Integer

i = 0

v = ""
n = ""

q = "INSERT INTO " & strTable & " "

Dim xdtField As Variant
Dim xdtValue As Variant

For Each xdtField In dtFields()
n = n & xdtField & ", "
Next

For Each xdtValue In dtValues()
xdtValue = IIf(IsNumeric(xdtValue), xdtValue, "'" & xdtValue & "'")

If LCase(xdtValue) = "null" Then
v = v & "NULL, "
ElseIf LCase(xdtValue) = "now()" Then
v = v & Format(Now, "yyyy-mm-dd hh:mm:ss") & ", "
ElseIf xdtValue = "" Then
v = v & "'', "
Else
v = v & xdtValue & ","
End If
i = i + 1
Next

n = RTrim(n)
v = RTrim(v)

If Right(n, 1) = "," Then n = Mid(n, 1, Len(n) - 1)
If Right(v, 1) = "," Then v = Mid(v, 1, Len(v) - 1)

q = q & "(" & n & ") VALUES (" & v & ")"

Query = q
blnRunOK = RunQuery
RunQueryInsert = blnRunOK
End If
Exit Function
YourMama:
RunQueryInsert = False
Exit Function
End Function

Public Function RunQueryUpdate(strTable As String, _
dtFields() As Variant, dtValues() As Variant, _
Optional strWhere As String = "") As Boolean
On Error GoTo YourMama
Dim strSQL As String
Dim blnRunOK As Boolean

If IsConnect Then
Dim q As String
Dim v As String
Dim n As String
Dim i As Integer

i = 0

v = ""
n = ""

q = "UPDATE " & strTable & " SET "

Dim xdtField As Variant
Dim xdtValue As Variant

For Each xdtValue In dtValues()
xdtField = dtFields(i)
n = xdtField

xdtValue = IIf(IsNumeric(xdtValue), xdtValue, "'" & xdtValue & "'")

If LCase(xdtValue) = "'null'" Then
v = "NULL, "
ElseIf LCase(xdtValue) = "'now()'" Then
v = "'" & Format(Now, "yyyy-mm-dd hh:mm:ss") & "'"
ElseIf xdtValue = "" Then
v = "''"
Else
v = xdtValue
End If

q = q & n & "=" & v & ","

i = i + 1
Next

q = RTrim(q)
If Right(q, 1) = "," Then q = Mid(q, 1, Len(q) - 1)

If strWhere <> "" Then q = q & " WHERE " & strWhere

Debug.Print q

Query = q
blnRunOK = RunQuery
RunQueryUpdate = blnRunOK
End If
Exit Function
YourMama:
RunQueryUpdate = False
Exit Function
End Function

Private Sub Class_Initialize()
myDBType = -1
strDBPath = ""
strDBName = ""
strDBPassword = ""
strDBServer = ""
strDBPort = ""
strDBUserName = ""
Call ConnectDB
End Sub

Private Sub Class_Terminate()
Set myRecordSet = Nothing
Set myConnection = Nothing
End Sub

2. Kita buat sebuah Module untuk koneksi ke databasenya, kita berinama “basDB”. tuliskan code dibawah ini dalam “basDB” tersebut :

Option Explicit

Public myDB As New clsDB
Public strDBServer As String
Public strDBPort As String
Public strDBUserName As String
Public strDBPassword As String
Public strDBName As String
Public strErr As String

Function Koneksi()
Set myDB = New clsDB
With myDB
.DBType = dbMySQL
.DBServer = "localhost"
.DBPort = 3306
.DBUserName = "root"
.DBPassword = ""
.DBName = "dbtoko"
.ConnectDB
strErr = .ErrQuery
If Not myDB.IsConnect Then
MsgBox strErr, vbExclamation
Else
MsgBox "Koneksi berhasil", vbInformation
End If
End With
End Function

Ok sobat, selesai sudah dalam membuat class untuk CRUD databasenya, selanjutnya kita akan buat form pada VB 6 untuk proses simpan edit dan hapus data. Sampai jumpa di artikel berikutnya, Membuat CRUD Database MySQL – VB 6 ( Bagian 2 ). Semoga bermanfaat, terima kasih

Leave a Reply

Your email address will not be published.