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
.
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
buetul bro, ketika membuat user berikan privelege syntax dasar nya, at least select, update dan insert
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
@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…
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?
@panjul: Ubah cursornya ke adUseClient, misalnya seperti ini ->
objRS.CursorLocation = adUseClient
. Kemungkinan kedua anda berusaha mengupdate field dengan tipe data AutoIncrement.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
Artikelnya bgus sekali mas, boleh dong saya minta banyak tulisan2 lg yg ngbhs ttg vb dan mysql. Salam sukses
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 =-.
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
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..
@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
If apakah_ada(“tbl_murid”, “kode_murid”, kode_spk, False) = True
disini kode_spk itu sebagai apa mas ? saya gak ngerti ?
@dinda: itu untuk variable aja koq… di ganti dengan nilai juga bisa….
Nice forum, Kalo buat file setup VB6 + MySQL jadi 1 gmn ya mas ? thx
Nice articles..
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
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
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
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
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….