Minggu, 26 Februari 2012

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 = adUseClientuntuk 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 keDatePicker 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 statementSet rs_edit = Nothing.

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

Tidak ada komentar:

Posting Komentar