Membuka Data Server MySQL

Setelah membahas tentang koneksi Visual Basic ke MySQL, sekarang kita akan mendiskusikan tentang cara membuka data dari server setelah kita terkonek/terhubung dengan server MySQL. Sebetulnya cara membuka data ini sama dengan membuka ke server-server database yang lain. Cuman kali ini kita akan fokus dengan MySQL.

Langkah pertama yang kita ambil adalah membuat object Recordset dulu. Lalu Recordset ini lah yang akan kita manipulasi untuk membuka data dari server. Coba kita lihat dari satu prosedur lengkap yang saya tulis ini:

Private Sub edit_data()
'/deklarasikan variable-variable yang digunakan
Dim rs_edit As New ADODB.Recordset
Dim kode_trans As String
Dim str_open As String
'/tautkan variable
kode_trans = Trim(txtkode_barang_masuk.Text)
'/set string sql
str_open = "SELECT * FROM tbl_barang_masuk WHERE kode_transaksi='" & kode_trans & "'"
'/buka data
With rs_edit
    .CursorLocation = adUseClient
    .Open str_open, myconn, adOpenStatic, adLockReadOnly
    .Requery
    If .RecordCount <= 0 Then
        MsgBox "Kode Transaksi : " & kode_trans & " tidak ditemukan!", vbExclamation, "Tidak Ketemu"
        txtkode_barang_masuk.Text = ""
    Else
        cmbtgl_trans.Value = .Fields("tgl_trans").Value
        txtkode_supplier.Text = .Fields("kode_supplier").Value
    End If
End With
'/hapus memory
Set rs_edit = Nothing
End Sub

Di blok awal deklarasikan dulu variable-variable yang akan anda gunakan, yang paling penting kali ini adalah membuat variable yang memuat recordset, yaitu dengan Dim rs_edit As New ADODB.Recordset. Variable recordsetnya jadi saya beri nama rs_edit dan saya memilih ADO sebagai object koneksinya (ya iyalah masa hari gini masih pakai DAO) Lalu buat variable untuk membuat SQL string nya, bisa saja langsung ditulis setelah metode Open, tapi saya lebih suka untuk memisahkan untuk debugging jauh lebih bagus. Karena kali ini kita akan membuat data, kita akan gunakan statement SQL: SELECT.

Setelah itu baru kita buka data. Karena MySQL tidak mendukung cursor di server, kita akan letakkan cursor di Client. Jadi tulis .CursorLocation = adUseClient untuk set itu. Di baris selanjutkan kita bisa lihat ada baris untuk membuka data dari SQL statement yang sudah kita buat: .Open str_open, myconn, adOpenStatic, adLockReadOnly.

Biasanya setelah terbuka saya deteksi apakah ada data atau tidak, jika tidak saya akan beritahukan user. Tetapi jika sudah ada datanya, tautkan nilainya ke control anda, seperti baris yang berikut: cmbtgl_trans.Value = .Fields("tgl_trans").Value. Baris adalah mentautkan field tgl_trans ke DatePicker yang saya beri nama cmbtgl_trans.

Jika anda hanya ingin membuka dan mentautkan ke control-control disuatu form, anda bisa menghapus variable recordset setelah terpakai untuk menghemat resource. Anda bisa langsung menghancurkan variable tersebut dengan statement Set rs_edit = Nothing.

21 comments

  1. salam kenal mas edi,
    saya mencoba membuat sesuai contoh,
    tapi ketika di run dan di klik adodb nya
    muncul pesan [MySQL][ODBC 3.51 Driver][mysql-4.0.17-standard-log]update command denied to user bla..bla..bla for table bla..bla..,
    itu kenapa ya mas?
    apakah priviledgenya harus penuh (bisa insert,update,dll), mengingat user saya cuma bisa select aja

    terimakasih ditunggu sekali mas jawabannya

  2. buetul bro, ketika membuat user berikan privelege syntax dasar nya, at least select, update dan insert

  3. Mas aku yg newbie mau tanya nie

    kalo buat koneksi vb ke my sql meng9unakan adodc gimana source codenya?(udh install adodb v 5.1) Terutama buat isi data ke tabel yg ada d database? Bingung neh. Tol0ng reply k email Ku Ya? Thankz bngtz

  4. salam kenal Mas Edi..

    ini saya lagi coba pindahkan dataserver dari MS-SQL ke MySQL… waktu update data yang muncul..

    “Row cannot be located for updating. Some values may have been changed since it was last read.”

    saya jga pke vb6 sp6, bagaimana?

  5. @panjul: Ubah cursornya ke adUseClient, misalnya seperti ini -> objRS.CursorLocation = adUseClient. Kemungkinan kedua anda berusaha mengupdate field dengan tipe data AutoIncrement.

  6. MySQL ver 5, ODBC 5.1, VB6 SP6

    koneksi sukses, baca data…sukses, hapus…sukses, updatenya…error spt post saya sebelumnya

    saya pake ADO kontrol
    koneksi pake ConectionString
    Recorsource pake string SQL
    dan di properties ADO sudah menunjukkan CursorLocation=adUseClient, di tabel tidak ada field yg AutoIncrement…
    padahal record hanya 1…

    maaf klo merepotkan, terima kasih

  7. Artikelnya bgus sekali mas, boleh dong saya minta banyak tulisan2 lg yg ngbhs ttg vb dan mysql. Salam sukses

  8. Mencoba menjawab sdr #panjul
    Awalnya saya juga punya masalah seperti itu ”
    Row cannot be located for updating. Some values may have been changed since it was last read.”

    ternyata ketika saya selidiki, ternyata masalahanya ketika kita memanggil tablenya, dan seperti dalam blok mas Edi, bahwa untuk memanggil table harus berupa query.
    contoh yang salah:
    rs.open “tBarang”, con, adOpenKeySet, adLockOptimistic

    seharusnya:
    rs.open “SELECT * FROM tBarang”, con, adOpenKeySet, adLockOptimistic

    Sehingga, untuk error di atas seharusnya tidak ada lagi.

    Mudah2an bisa membantu.

    Terima kasih banyak buat Mas Edi yang mau berbagi ilmu.

    Salam,
    Firman

  9. Salam mas Edi,
    Ada bbrp pertanyaan nihh, maklum nubie banget sihh..
    1. bagaimana menampilkan record dari suatu tabel MySQL ke Listview vb6.
    2. bagaimana mencegah terjadinya input data kembar (soalnya saya tidak menggunakan autonumber untuk id-nya), misalnya sebelum disimpan muncul messagebox validasi…
    thanks mas..

  10. @yoga: coba saya bantu ya… (mungkin dari rekan-rekan lain ada masukan yang lebih bagus):
    1. untuk menampilkan dari record ke listview berikut contoh code yang saya ambil dari ebook visual basic 6:
    Sub LoadListViewFromRecordset(LV As ListView, rs As ADODB.Recordset, _
    Optional MaxRecords As Long)
    Dim fld As ADODB.Field, alignment As Integer
    Dim recCount As Long, i As Long, fldName As String
    Dim li As ListItem

    ' Clear the contents of the ListView control.
    LV.ListItems.Clear
    LV.ColumnHeaders.Clear
    ' Create the ColumnHeader collection.
    For Each fld In rs.Fields
    ' Filter out undesired field types.
    Select Case fld.Type
    Case adBoolean, adCurrency, adDate, adDecimal, adDouble
    alignment = lvwColumnRight
    Case adInteger, adNumeric, adSingle, adSmallInt, adVarNumeric
    alignment = lvwColumnRight
    Case adBSTR, adChar, adVarChar, adVariant
    alignment = lvwColumnLeft
    Case Else
    alignment = -1 ' This means "Unsupported field type".
    End Select
    ' If field type is OK, create a column with the correct alignment.
    If alignment -1 Then
    ' The first column must be left-aligned.
    If LV.ColumnHeaders.Count = 0 Then alignment = lvwColumnLeft
    LV.ColumnHeaders.Add , , fld.Name, fld.DefinedSize * 200, _
    alignment
    End If
    Next
    ' Exit if there are no fields that can be shown.
    If LV.ColumnHeaders.Count = 0 Then Exit Sub

    ' Add all the records in the recordset.
    rs.MoveFirst
    Do Until rs.EOF
    recCount = recCount + 1
    ' Add the main ListItem object.
    fldName = LV.ColumnHeaders(1).Text
    Set li = LV.ListItems.Add(, , rs.Fields(fldName) & "")
    ' Add all subsequent ListSubItem objects.
    For i = 2 To LV.ColumnHeaders.Count
    fldName = LV.ColumnHeaders(i)
    li.ListSubItems.Add , , rs.Fields(fldName) & ""
    Next
    If recCount = MaxRecords Then Exit Do
    rs.MoveNext
    Loop
    End Sub

    2. Untuk mencegah duplicate, biasa saya membuat satu prosedur untuk itu, berikut prosedur yang saya buat:
    Public Function apakah_ada(ByVal sTable As String, ByVal sField As String, ByVal sStr As String, Optional isNum As Boolean) As Boolean
    Dim rs_apa_ada As New ADODB.Recordset
    On Error GoTo apakah_ada_Error
    With rs_apa_ada
    .CursorLocation = adUseClient
    If isNum = True Then
    .Open "SELECT * FROM " & sTable & " WHERE " & sField & " = " & sStr, my_conn, adOpenStatic, adLockReadOnly
    Else
    .Open "SELECT * FROM " & sTable & " WHERE " & sField & " = '" & sStr & "'", my_conn, adOpenStatic, adLockReadOnly
    End If
    If .RecordCount <= 0 Then
    apakah_ada = False
    Else
    apakah_ada = True
    End If
    .Close
    End With
    Set rs_apa_ada = Nothing

    '___________________________________________________________
    On Error GoTo 0
    Exit Function

    apakah_ada_Error:
    MsgBox "Ada Kesalahan ! " & vbCrLf & "Nomor Kesalahan : " & Err.Number & vbCrLf & "Deskripsi : " & Err.Description & vbCrLf & "Di prosedur apakah_ada dalam modul mdlfungsi_aplikasi"
    End Function

    Untuk penggunaan function tersebut seperti ini: If apakah_ada("tbl_murid", "kode_murid", kode_spk, False) = True Then MsgBox "Kode Murid: " & kode_murid & " sudah ada!", vbExclamation, "Sudah ada": Exit Sub

  11. If apakah_ada(“tbl_murid”, “kode_murid”, kode_spk, False) = True

    disini kode_spk itu sebagai apa mas ? saya gak ngerti ?

  12. @dinda: itu untuk variable aja koq… di ganti dengan nilai juga bisa….

  13. Salam.
    Mas Edy saya mw bertanya dan meminta bantuan nya sedikit mengenai kendala duplicate value sewaktu menyimpan record baru dengan menggunakan ADODB..
    koding yg saya gunakan sbb:

    Dim strsql As String
    If Not (Text3.Text = “” Or Text1.Text = “” Or Text1.Text = “”) Then
    Set rsmasukpasien = New ADODB.Recordset
    strsql = “select*From TBPASIEN”
    KoneksiDBPARU
    rsmasukpasien.Open strsql, ConnPARU, adOpenDynamic, adLockOptimistic
    rsmasukpasien.AddNew
    ‘rsmasukpasien.Fields(“No_Pasien”) = Text0.Text
    rsmasukpasien.Fields(“nm_pasien”) = Text1.Text
    rsmasukpasien.Fields(“tgl_lahir”) = DTPicker1
    rsmasukpasien.Fields(“alamat”) = Text3.Text
    rsmasukpasien.Fields(“id_pengguna”) = Text5.Text
    rsmasukpasien.Fields(“pass”) = Text6.Text
    If Optlk.Value = True Then
    rsmasukpasien.Fields(“jns_kelamin”) = “Laki-laki”
    Else
    rsmasukpasien.Fields(“jns_kelamin”) = “Perempuan”
    End If
    rsmasukpasien.Fields(“no_tlp”) = Text4.Text
    rsmasukpasien.Update
    Text1.Text = “”
    ‘DTPicker1.Value = “”
    Text3.Text = “”
    Text5.Text = “”
    Text6.Text = “”
    Text4.Text = “”
    MsgBox “Anda Berhasil Tercatat”

    Else
    MsgBox “Maaf, form tidak boleh ada yang kosong,Isi Terlebih Dahulu”, vbOKOnly + vbInformation, “Isi”
    End If

    End If
    End Sub

    saya mempunyai kendala bagaimana cara membuat prosedur agar menghindari duplicate sewaktu menyimpan data.. pada koding diatas.
    mohon bantuannya,,maaf saya masih newbie mas
    thnks sebelumnya

  14. Salam Kenal Mas Edi….

    saya mo nanya dan minta bantuan ni mas, saya punya 2 komputer, database saya tarok di komputer yg 1(server), komputer yg satu nya lagi tuk jalanin program vb nya aja (client). database saya pake mysql mas. gimana cara manggil database yg di komputer 1(server) dengan make komputer 1 lagi mas..???

    Tolong kasi masukan ya mas…
    Thank’s sebelum nya

  15. mas mau tanya nih, nama jembatan adodc buat connect SQL tu namanya apa?
    jet ole atau apa gitu, soalnya masih pake DB dari acces
    ditunggu pencerahannya mas

  16. mau nanya nih, kalo mysql di simpan di hosting internet, terus mau di akses dengan vb kok gak bisa. apanya yang salah, apakah hosting saya jelek, tolong kasih referensi untuk hosting yang mysqlnya bisa diakses dengan vb. terimakasih

  17. mas tolong kalo konfigurasi database pake file .ini ato xml ato text dengan module gimana ya ? agar supaya biar nanti bila ada perubahan server… ga perlu ke module lagi… hehehe… maklum… baru
    source nya kirim mail mas
    makasi….

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.