jump to navigation

Mengakses Database dengan DAO (Insert, update, delete) Wed - Mar 13, 2002

Posted by supriyatna in Programming, Windows.
Tags: , , , , , ,
trackback

Kebanyakan pengembang akan menggunakan Visual Basic sebagai pemanipulasi dan pengolah data (Front End) sehingga data yang disimpan dapat dimanfaatkan untuk berbagai keperluan. Ini bukan berarti VB tidak dapat melakukan hal pekerjaan lainnya. Ya! Mungkin dengan alasan klasik bahwa setiap kegiatan yang berhubungan dengan manusia tidak terlepas dari deretan informasi yang membutuhkan pengolahan secara efisien dan akurat. Sehingga dari sekian banyak kemampuan yang ada hampir kebanyakan programmer akan selalu berurusan dengan Database. Disini tidak akan dijelaskan apa dan bagaimana suatu konsep Database. Saya menganggapnya anda yang sedang membaca artikel ini, sudah memahami, minimal pernah membacanya (;-(.

Sejauh yang saya ketahui, Visual Basic telah menyiapkan 3 macam cara pengaksesan kedalam database, yaitu DAO, RDO, dan ADO. Masing-masing secara singkat akan saya jelaskan sebagi berikut:

  • DAO, (Data Access Object). Pada umumnya digunakan untuk database Desktop, maksudnya?. Ya! hanya dapat mengakses Database desktop atau sering dikenal juga dengan istilah Single Database, standalone Database, Local Database. Contohnya adalah .DBF, Ms. Access (.MDB), Paradox. Kalaupun tetap menggunakan ODBC, dan database-nya diletakan pada server kemudian diakses melalui client tetap saja penggunaannya hanya bersifat Sharing database.
  • RDO, (Remote Data Object). Berbeda dengan DAO, secara khusus RDO digunakan untuk mengelola database Server secara remote. Contoh dari database Server adalah, SQL Server, MySQL, Oracle, InterBase (Biasanya include pada installasi Delphi). Walaupun RDO digunakan untuk mengakses Database Server bukan berarti RDO tidak dapat mengakses Database desktop. Kenyataannya adalah Database Desktop masih dapat diakses dengan bantuan ODBC. Secara “urakan” dengan tujuan untuk mempermudah pengenalan RDO khususnya untuk yang sudah terbiasa dengan DAO. Saya lebih sering menyamakan bahwa Object Database (DAO) digantikan dengan Object Connection (RDO) dan Object Recordset digantikan dengan Resultset. Walaupun sesungguhnya bukan sekedar dari pengalihan nama saja, namun lebih dari itu. (Informasi!!: Pada DAO, Object Connection dapat digunakan apabila Workspace yang dibuat dengan menggunakan Option dbUseODBC).
  • ADO, (ActiveX Data Object). Jika Local Database dapat diakses dengan menggunakan DAO, dan Database server dengan menggunakan RDO lalu untuk apa lagi dibuat ADO, apa programmer Microsoft sudah kurang kerjaan?.😉 *smile*, no! dari masing-masing kegunaan yang ada pada ADO dan RDO, pada perkembangan selanjutnya, ternyata masih ada yang tidak dapat dilakukan oleh keduanya. Yaitu tidak dapat dipakai pada saat membangun Web-application (Internet application). ADO memperbolehkan Client Application untuk mengakses Database Server dengan melalui Provide OLE DB, sehingga memungkinkan untuk membangun aplikasi Client/Server dan Web Application.

Sekarang saatnya untuk membahas manipulasi database. Dalam “kerajaan database” Pengakses database secara umum terdiri dari INSERT, UPDATE dan DELETE, Penambahan, perubahan, serta penghapusan Data. Ketiganya akan dipakai dan akan kita bawa kemanapun kita pergi, baik dengan database ataupun bahasa pemrograman apapun. Untuk contoh kali ini seluruh proses dilakukan tidak dengan menggunkan SQL statement tetapi dengan memanfaatkan property dan Method yang ada pada object Recordset. Walaupun masih terdapat cara lain yaitu dengan menggunakan SQL Statement.

1. Menambah Data kedalam Database.

a. Siapkan tempat untuk menyimpan informasi.
b. Simpan informasi kedalam tempat yg sudah disiapkan sebelumnya.
c. Simpan secara permanent informasi tersebut kedalam suatu media.

' Contoh langsung proses tersebut diatas
' pada Visual Basic adalah
' Sebagai berikut:
rs.AddNew                        ' Langkah (a)
rs.Fields("NAMA") = txtNama.Text ' Langkah (b)
rs.Update                        ' Langkah (c)

2. Merubah informasi pada Database

a. Tentukan informasi yg akan dirubah.
b. Simpan informasi baru untuk menggantikan informasi yang lama.
c. Simpan secara permanent informasi tersebut kedalam suatu media.

' Syntak pada Visual Basic untuk memperbaharui data
rs.FindFirst "NAMA='" & txtNama.Text & "' " 'Langkah (a)
'
If rs.NoMatch Then
  MsgBox "Record tidak ditemukan!",vbCritical, "Error"
Else
  rs.Edit                          ' Langkah (a)
  '
  rs.Fields("NAMA") = txtNama.Text ' Langkah (b)
  rs.Update                        ' Langkah (c)
  MsgBox "Record telah diperbaharui", _
    vbInformation, "Informasi"
End If

3. Menghapus data pada Database

Proses ini adalah yang paling mudah, semudah kita menghancurkan sesuatu yang sudah kita buat dengan sudah payah, *smile*.

a. Tentukan informasi/record yang akan dihapus
b. Hapus secara permanent

' Proses diatas terlihat pada potongan program dibawah!
rs.FindFirst "NAMA='" & txtNama.Text & "'" ' Langkah (a)
'
If rs.NoMatch Then
  '
  MsgBox "Nama tersebut tidak ditemukan", _
    vbExclamation, "Error"
Else
  If MsgBox("Hapus record?", vbQuestion + _
    vbYesNo, "Konfirmasi") = vbYes Then
    '
    rs.Delete ' Langkah (b)
  End If
End If

Sedangkan program lengkap untuk contoh penggunaaan DAO terlihat pada listing dibawah. Adapun control-control yang digunakan pada Contoh dibawah adalah sebagai berikut:

  • ImageList1 : Untuk menyimpan Icon-icon yang digunakan pada ToolBar. Ingat~! Setiap icon ditentukan key-nya sesuai dengan fungsinya masing-masing karena ImageList ini akan digunakan pada Toolbar.
  • Image1 : Untuk menampilkan Banner, dimana Gambar yg digunakan berasal dari file Resourse (.RES).
  • ToolBar1 : Untuk menampilkan tombol-tombol operasi.
  • StatusBar1
  • Timer, TextBox, ComboBox, CheckBox serta Frame.
Option Explicit
Dim db As Database           ' Siapkan Object Database
Dim rs As Recordset          ' Siapkan Object Recordset
Dim rsImmediate As Recordset
Dim inOperation As String    ' Menentukan Modus Operasi
Dim nFlip As Byte            ' Untuk Animasi Banner
Dim gsGuest_Id As String     ' Varibel General ( berlaku
                             ' di form ini saja )

' Inisialiasi Form pada saat diload.
Private Sub InitForm()
  cbValid.Value = vbChecked
  cboGender.AddItem "Laki-laki"
  cboGender.AddItem "Perempuan"
  DB_Retrieve rs("GUEST_ID")
  Frame1.Enabled = False
End Sub

Private Sub Form_Load()
Dim strPathDB As String
Dim oPanel As Panel
  strPathDB = IIf(Right(App.Path, 1) <> "\", _
    App.Path & "\", App.Path) & _
    "datatamu.mdb"
  '
  Set db = DBEngine.OpenDatabase(strPathDB)
  Set rs = db.OpenRecordset("GUESTBOOK", dbOpenDynaset)

  nFlip = 0   ' Set animasi Banner
  Call InitForm

  With Toolbar1
    .ImageList = ImageList1
    .Buttons.Add .Buttons.Count + 1, "batas1", _
        , tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "tambah", _
        , tbrDefault, "tambah"
    ' Parameter ke 4 digunakan untuk menentukan
    ' icon yang digunakan
    ' pada toolbar1 yang berasal dari ImageList1

    .Buttons(.Buttons.Count).ToolTipText = "Tambah data"
    '
    .Buttons.Add .Buttons.Count + 1, "ubah", , _
        tbrDefault, "ubah"
    .Buttons(.Buttons.Count).ToolTipText = "Ubah data"
    '
    .Buttons.Add .Buttons.Count + 1, "hapus", , _
        tbrDefault, "hapus"
    .Buttons(.Buttons.Count).ToolTipText = "Hapus"
    '
    .Buttons.Add .Buttons.Count + 1, "simpan", , _
        tbrDefault, "simpan"
    .Buttons(.Buttons.Count).ToolTipText = "Simpan"
    '
    .Buttons.Add .Buttons.Count + 1, "batas2", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "cancel", , _
        tbrDefault, "refresh"
    .Buttons(.Buttons.Count).ToolTipText = "Batal"
    '
    .Buttons.Add .Buttons.Count + 1, "batas3", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "keluar", , _
        tbrDefault, "keluar"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Keluar dari program"
    '
    .Buttons.Add .Buttons.Count + 1, "batas4", , _
        tbrSeparator
    .Buttons.Add .Buttons.Count + 1, "first", , _
        tbrDefault, "first"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record pertama"
    '
    .Buttons.Add .Buttons.Count + 1, "previous", , _
        tbrDefault, "previous"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record sebelumnya"
    '
    .Buttons.Add .Buttons.Count + 1, "next", , _
        tbrDefault, "next"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record selanjutnya"
    '
    .Buttons.Add .Buttons.Count + 1, "last", , _
        tbrDefault, "last"
    .Buttons(.Buttons.Count).ToolTipText = _
        "Ke record terakhir"
    '
  End With

End Sub

Private Sub Form_Resize()
  StatusBar1.Panels(1).Width = Me.ScaleWidth
End Sub

Private Sub Timer1_Timer()
  nFlip = nFlip + 1
  ' Banner yang ditampilkan berasal dari File resource
  Image1.Picture = LoadResPicture(100 + nFlip, _
    vbResBitmap)
  If nFlip >= 7 Then
    nFlip = 0
  End If
End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As _
  MSComctlLib.Button)
Dim strGuest_Id As String
  Select Case Button.Key
    Case "tambah"
      '
      inOperation = "tambah"
      Toolbar1.Buttons("ubah").Enabled = False
      Toolbar1.Buttons("hapus").Enabled = False
      Frame1.Enabled = True
      Call DB_Blank
      txtGuest_ID = "**"
      '
    Case "ubah"
      Toolbar1.Buttons("tambah").Enabled = False
      Toolbar1.Buttons("ubah").Enabled = False
      inOperation = "ubah"
      Frame1.Enabled = True
      DB_Retrieve gsGuest_Id
    Case "cari"
      '
      strGuest_Id = InputBox( _
        "Masukan Guest ID yang " & _
        "akan di Edit?", "Kriteria")
      If strGuest_Id <> "" Then
        Toolbar1.Buttons("tambah").Enabled = False
        Toolbar1.Buttons("ubah").Enabled = False
        inOperation = "ubah"
        DB_Retrieve strGuest_Id
      End If
    Case "simpan"
      If inOperation = "tambah" Then
        '
        Call DB_Tambah
        Frame1.Enabled = False
        '
      ElseIf inOperation = "ubah" Then
        '
        If DB_Ubah Then
          Frame1.Enabled = False
        End If
      Else
        MsgBox "Please press Add button, " & _
            "Or Modify Button " & _
            vbCrLf & _
          "then you can save entire data", _
          vbExclamation, "Error"
        '
      End If
    Case "hapus"
      If inOperation = "ubah" And _
      txtGuest_ID.Text <> "" Then
        If MsgBox("Anda ingin menghapus " & _
          "Record dengan " &  _
          "Guest ID : " & _
          txtGuest_ID.Text & "?", _
          vbQuestion + vbYesNo, _
            "Konfirmasi") = vbYes Then
          '
          rs.Delete
          Call DB_Blank
          StatusBar1.Panels(1).Text = _
            "Record(s) deleted"
          Call DB_Cancel
        End If
      End If
    Case "cancel"
      Call DB_Cancel
    Case "keluar"
      Unload Me
      End ' Make sure all Object has
          ' been release from Memory

    ' Navigator Button Pressed!!!
    Case "first", "previous"
      '
      If inOperation = "ubah" Then
        If MsgBox("Cancel update data?", _
          vbYesNo + vbQuestion, _
          "Confirmation") = vbYes Then
          Call DB_Cancel
          '
        End If
      End If
      If Button.Key = "first" Then
        rs.MoveFirst
      Else
        rs.MovePrevious
      End If

      If rs.BOF Then
        rs.MoveFirst
      End If

      DB_Retrieve rs("GUEST_ID")
      '
    Case "next", "last"
      '
      If Button.Key = "next" Then
        rs.MoveNext
      Else
        rs.MoveLast
      End If
      If rs.EOF Then
        rs.MoveLast
      End If
      DB_Retrieve rs("GUEST_ID")
      Call DB_Cancel
      '
  End Select
End Sub
' Fungsi General
' --------------
Private Sub DB_Tambah()
Dim strLastRec As String

  If Not IsNull(txtTgl_Lahir.Text) Then
    If Not IsDate(txtTgl_Lahir.Text) Then
      MsgBox "Invalid Format Date", _
             vbExclamation, "Warning"
      txtTgl_Lahir.SetFocus
      Exit Sub
    End If
  End If

 ' Proses untuk Membuat Running Number, Auto Number
 ' Yaitu dengan men-select MAX field GUEST_ID
 ' kemudian ditambahkan
 ' dengan 1.
  Set rsImmediate = db.OpenRecordset( _
    " SELECT MAX(VAL(GUEST_ID))" & _
    " AS LAST_REC FROM GUESTBOOK", dbOpenDynaset)
  strLastRec = rsImmediate("LAST_REC")
  strLastRec = Format(Val(strLastRec) + 1, "00")
  rsImmediate.Close
  Set rsImmediate = Nothing

  rs.AddNew
  rs("GUEST_ID") = strLastRec
  rs("NAMA") = txtNama.Text
  rs("TGL_LAHIR") = txtTgl_Lahir.Text
  rs("TELEPON") = txtTelepon.Text
  rs("EMAIL") = txtEmail.Text
  rs("GENDER") = IIf(cboGender.ListIndex = 0, "L", "P")
  rs("KOMENTAR") = txtKomentar.Text
  rs("VALID") = IIf(cbValid.Value = vbChecked, "Y", "N")
  rs.Update
  '
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  '
  DB_Retrieve strLastRec
  inOperation = ""
  '
End Sub

Private Function DB_Ubah() As Boolean
Dim strLastRec As String
  DB_Ubah = False
  '
  If Len(Trim(txtTgl_Lahir.Text)) = 0 Then
    MsgBox "Tanggal Lahir tidak boleh kosong!", _
        vbExclamation, "Peringatan"
    Exit Function
  Else
    If Not IsDate(txtTgl_Lahir.Text) Then
      MsgBox "Invalid Format Date", _
             vbExclamation, "Warning"
      txtTgl_Lahir.SetFocus
      Exit Function
    End If
  End If
  '
  rs.Edit
  rs("NAMA") = txtNama.Text
  rs("TGL_LAHIR") = txtTgl_Lahir.Text
  rs("TELEPON") = txtTelepon.Text
  rs("EMAIL") = txtEmail.Text
  rs("GENDER") = IIf(cboGender.ListIndex = 0, "L", "P")
  rs("KOMENTAR") = txtKomentar.Text
  rs("VALID") = IIf(cbValid.Value = vbChecked, "Y", "N")
  rs.Update
  '
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  '
  DB_Retrieve txtGuest_ID.Text
  inOperation = ""
  DB_Ubah = True
  '
End Function

Private Sub DB_Retrieve(strIDRec As String)
Dim strSQL As String

  rs.FindFirst "GUEST_ID='" & strIDRec & "' "
  txtGuest_ID.Text = rs("GUEST_ID")
  gsGuest_Id = txtGuest_ID.Text
  txtNama.Text = rs("NAMA")

' Apabila field yang akan ditampilkan kedalam Control
' (contoh: TextBox) ternyata NULL, hal ini akan
' menyebabkan error, Oleh karena itu sebelum
' dimasukan kedalam Control, nilai pada field harus
' dicek terlebih dahulu. Saya biasanya menggunakan
' fungsi IsNull() yang digabung dengan penggunaan fungsi
' IIf( logikaExpression, ExpresiTrue, ExpresiFalse
' atau dgn menambahkan Empty String [rs("FIELD") & ""]

  txtTgl_Lahir.Text = IIf(IsNull(rs("TGL_LAHIR")), _
    "", rs("TGL_LAHIR"))
  txtTelepon.Text = IIf(IsNull(rs("TELEPON")), _
    "", rs("TELEPON"))
  txtEmail.Text = IIf(IsNull(rs("EMAIL")), _
    "", rs("EMAIL"))
  cboGender.ListIndex = IIf(rs("GENDER") = "L", 0, 1)
  txtKomentar.Text = rs("KOMENTAR")
  cbValid.Value = IIf(rs("VALID") = "Y", _
    vbChecked, vbUnchecked)
  '
End Sub

Private Sub DB_Cancel()
  '
  inOperation = ""
  Toolbar1.Buttons("tambah").Enabled = True
  Toolbar1.Buttons("ubah").Enabled = True
  Toolbar1.Buttons("hapus").Enabled = True
  Frame1.Enabled = False
  DB_Retrieve gsGuest_Id
  '
End Sub

Private Sub DB_Blank()
Dim strSQL As String
  txtGuest_ID.Text = ""
  txtNama.Text = ""
  txtTgl_Lahir.Text = ""
  txtTelepon.Text = ""
  txtEmail.Text = ""
  cboGender.ListIndex = -1    ' Tidak memilih satupun
  txtKomentar.Text = ""
  cbValid.Value = vbChecked
  '
End Sub

Comments»

No comments yet — be the first.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: