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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.

Artikel-artikel Yang Berhubungan Dengan Artikel Ini

21 Komentar

diky  on October 24th, 2008

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

Bart. Edi  on October 24th, 2008

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

Ardi  on March 14th, 2009

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

Bart. Edi  on March 15th, 2009

@Ardi: Aduh, maaf banget saya ngga pernah menggunakan ADODC karena saya lebih suka menggunakan cara manual dengan script. Tapi anda bisa lihat di: http://www.vbexplorer.com/VBExplorer/wrox/sample1061.asp untuk contoh penggunaan ADODC, semoga membantu…

panjul  on April 22nd, 2009

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?

Bart. Edi  on April 22nd, 2009

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

panjul  on April 23rd, 2009

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

Zis  on May 31st, 2009

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

Fajrin Indriani  on July 8th, 2009

Salam kenal mas edi,,, artikelnya bagus banget dan bermanfaat banget buat aku yang masih pemula dalam vb dan my sql,,, soalnya lagi buat skripsi akhir nich dan buat programnya pake vb dan databasenya mySQL..
.-= Fajrin Indriani´s last blog ..KETIKA CINTA BERTASBIH…ITS A GOOD FILM =-.

Firman  on October 6th, 2009

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

yoga  on December 17th, 2009

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..

Bart. Edi  on December 18th, 2009

@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

dinda  on April 20th, 2010

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

disini kode_spk itu sebagai apa mas ? saya gak ngerti ?

Bart. Edi  on April 21st, 2010

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

athallah  on April 25th, 2010

Nice forum, Kalo buat file setup VB6 + MySQL jadi 1 gmn ya mas ? thx

No Name  on November 27th, 2010

Nice articles..

zacky  on January 12th, 2011

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

chimot  on January 26th, 2011

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

bianewbie  on December 6th, 2011

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

erdy  on December 28th, 2011

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

harun  on February 5th, 2015

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….

Berikan opini anda tentang artikel ini

CommentLuv badge