Senin, 05 Januari 2009

Koneksi VB - My SQL tanpa ODBC

Bagi Anda yang biasa membuat program pengolahan DataBase mungkin sudah tidak asing lagi Untuk mengkoneksikan VB dengan MySQL. Untuk saat ini Data Base MySQL memang sangat ideal, baik dari segi kecepatan maupun karena gratisnya. Sayang nya memang MySQL tidak memiliki driver standard seperti Access atau SQL Server. Salah Satu Solusi mungkin bisa menggunakan MyODBC untuk mengkoneksikannya. akan tetapi, MyODBC memiliki kelemahan dari segi kecepatan, terutama jika data sudah membengkak jumlahnya. Koneksi tanpa ODBC mungkin bisa menjadi solusi. Langsung Pada inti aja mungkin, berikut langkah-langkah nya:
1. Download dan Install VbMySQLDirect (googling aja atau Klik Disini )
2. Buat Program Baru
3. Tambahin VbMySQLDirect ke Referensi program (Menu Project->References->VbMySQLDirect 1.0)
4. Tinggal definisiin variable buat koneksi dan Recordset

Contoh Penggunaan:

Dim koneksi As New MYSQL_CONNECTION
Dim Recset As New MYSQL_RS

Private Sub Form_Load()
NamaServer = "10.204.15.214"
UserID = "root"
Password = "123456"
dbName = "test"
koneksi.CursorLocation = adUseClient
koneksi.OpenConnection NamaServer, UserID ,Password, dbName

Recset.OpenRs "select * from t_contoh_data", koneksi, 3, 3
MsgBox "Data ke 1 = " & Recset.Fields("Cth1")
End Sub

Udah, cuma gitu ajah cara koneksinya, ga ribet setting ODBC segala.. Cukup simpel kan..??
Selamat mencoba..


58 komentar:

  1. Saya sudah coba koneksi vb tanpa odbc dan berhasil, tapi bagaimana untuk set datagrid nya saya sudah coba dengan "Set datagrid.datasource = koneksi" tapi nggak bisa klo pake odbc bisa, thanks.

    BalasHapus
  2. coba gunakan dbgrid
    penggunaan nya sama
    dbgrid.datasource=recset
    dimana recset adalah nama recordset yang akan ditampilkan datanya
    selamat mencoba

    BalasHapus
    Balasan
    1. tidak bisa, Run-time error '13': Type mismatch

      Hapus
  3. saya udah coba ini,,dari komputer sendiri sih udah konek ke mysqlnya,,tapi kok dari komputer lain gag mau remote ya ke server mysql??

    padahal firewall n antivirus udah disable ..

    BalasHapus
  4. coba tanya ke admin, settingan mysql nya (grant), ip komputer client punya hak akses ke server ga?

    BalasHapus
  5. Coba cek di Command Line Mysql:
    mysql> SHOW GRANTS;
    jika tidak terdaftar, bisa gunakan perintah ini untuk memberi hak akses:
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

    sesuaikan 'root' dengan username mysql di server

    BalasHapus
  6. Klu akses database dari Web online bukan dari localhost gmn bos??

    BalasHapus
  7. Harus tau IP web online nya donk..
    coba dari start menu->Run ketik
    ping somewebsite.com dan teken enter..
    contohnya
    ping yahoo.com
    akan keluar pesan :
    Pinging yahoo.com [209.191.93.53] with 32 bytes of data
    Nah.. 209.191.93.53 itulah IP nya si yahoo!! silahkan coba ping web Anda.. semoga berhasil

    BalasHapus
  8. tetep ga mau juga Bro.
    aku juga sudah instal VBMySQLdirect pake sample "Data viewer" ga mau konek ke database nya.. apakah ada sample yang lebih bagus lagi...
    kalau pake ODBC juga ga bisa... aku mohon bantuannya..

    BalasHapus
  9. mmm,, harusnya si bisa.. coba dipastikan alamat IP tempat anda meng-host, Database mySQL anda, username dan passwordnya juga, trus akses (PRIVILEGES) nya, bisa di akses dari client ga.. tanyakan ke admin Hosting nya.. memang beberapa hosting tidak mengizinkan koneksi langsung (All User) karena alasan keamanan..

    BalasHapus
  10. sekedar nambahin.. klo load database dari web, itu musti di grant sama server hostingnya, karena ada beberapa port di tutup sama server.

    coba contact admin server hosting. minta di bukain..
    semoga membantu

    hormat saya Jedul

    BalasHapus
  11. @Jedul.. Thx infonya.. maksud saya seperti itu.. sekali lagi terima kasih.. :)

    BalasHapus
  12. Recset.OpenRs "select * from t_contoh_data", koneksi, 3, 3

    bisa dijelasin ga, apa maksud'a??

    BalasHapus
  13. Recset= Nama Recordset yang sudah didefinisikan sebagai MY_SQLRS (Recordset My SQL)

    OpenRs= Perintah dr VBMySQLDirect untuk membuka recordset

    "select * from t_contoh_data" = Perintah SQL untuk memfilter semua (*) data dari table 't_contoh_data'

    Koneksi=Variable yang didefinisikan untuk mengoneksikan VB dengan database MySQL.

    3,3=Prefix dari VB dalam pengolahan tabel, silahkan baca VB manual untuk lebih jelasnya

    BalasHapus
  14. jika mau di pisah dalam modul dan form, bagaimana contohnya ya? karena saya coba pisah kok kluar eror :
    Compile eror - ByRef argument type mismatch

    BalasHapus
  15. kalo mao ditaro di modul definisiin variablenya jgn pake 'dim'

    gini aja, di modul bikin gini

    Public koneksi As New MYSQL_CONNECTION
    Public Recset As New MYSQL_RS

    Public Sub BukaKoneksi()
    NamaServer = "10.204.15.214"
    UserID = "root"
    Password = "123456"
    dbName = "test"
    koneksi.CursorLocation = adUseClient
    koneksi.OpenConnection NamaServer, UserID ,Password, dbName
    End Sub

    Nanti di form tgl panggil, misalnya

    Private Sub Form_Load()
    BukaKoneksi
    Recset.OpenRs "select * from t_contoh_data", koneksi, 3, 3
    MsgBox "Data ke 1 = " & Recset.Fields("Cth1")
    End Sub

    semoga berhasil..

    BalasHapus
  16. Kalo nama servernya pake IP Programnya error, tapi kalo nama servernya localhost, programnya bisa konek, kenapa ya ?

    BalasHapus
  17. Aneh ya,, baru dapet nih kasus ini, blm dapet jawabannya. ngoprek dolo :)

    BalasHapus
  18. bro , aku mau coba tampilkan data tabel di datagrid kok gak bisa yaa? sudad saya ketik
    ( datagrid.datasource = Recset )
    tapi malah error di "datagrid.datasource"

    BalasHapus
  19. coba gunakan dbgrid
    penggunaan nya sama
    dbgrid.datasource=recset

    BalasHapus
  20. bos ramdan untuk buka table (dbgrid.datasource=recset)maksudnya gmana yaa,dbgrid itu asalnya darimana?
    bisa dijelaskan soalnya aku buka table
    datagrid.datasource = Recset hasilnya error

    BalasHapus
  21. @joenet81: silahkan googling gunakan keyword TrueDBGrid..

    BalasHapus
  22. SQL = ""
    db = "DELETE FROM Pendaftaran WHERE " _
    & " no_pendaftaran='" & txtnodaf.Text & "'"
    db.Execute SQL, , adCmdText

    pa kode saya kan gini... tp pas di compile atau di execute error pas di db.execute diganti apa ya?/
    buat liat contoh sintak2/program add.save.delete di mana ya pak??
    trimakasih

    BalasHapus
  23. Kayanya salah tuh, ko:
    SQL="",
    malah db="DELETE FROM Pendaftaran WHERE " _
    & " no_pendaftaran='" & txtnodaf.Text & "'"

    Harusnya kan:
    SQL="DELETE FROM Pendaftaran WHERE " _
    & " no_pendaftaran='" & txtnodaf.Text & "'"

    db.Execute SQL, , adCmdText

    BalasHapus
  24. mau nanya nih, gimana menampilkan semua data saat form_load??? bukan cm satu kaya contoh yg anda berikan.

    terimakasih ^_^

    BalasHapus
  25. Pake tdbGrid aja yang simple
    nanti tinggal kasih command

    tdbgrid.datasource=RecSet
    Muncul deh semua data dari recordset ke grid

    BalasHapus
  26. untuk proses penyimpanan bagaimana tanpa menggunakan adodc?????? thenks b4

    BalasHapus
  27. Penyimpanan ke mana neh??
    Mungkin maksudnya nyimpen ke database MySQL kali yee..

    Kalo koneksi udah sukses mah nyimpen jadi perkara gampang

    Contoh deh

    Bikin form baru

    Tambahin 2 textbox (anggap text1 dan text2)
    Tambahin 2 Command Button (Anggap Command1 dan command2)

    di Code program masukin kode ini:

    Dim koneksi As New MYSQL_CONNECTION
    Dim Rs As New MYSQL_RS

    Private Sub Form_Load()
    koneksi.OpenConnection "localhost", "root", "", "broadcast"
    Rs.OpenRs "select * from acara", koneksi, 3, 2
    End Sub

    Private Sub Command1_Click()
    Rs.AddNew
    Rs.Fields(0) = Text1
    Rs.Fields(1) = Text2
    Rs.Update
    End Sub

    Private Sub Command2_Click()
    koneksi.Execute "INSERT INTO acara VALUES ('" & Text1 & "', '" & Text2 & "'"
    End Sub


    _____________________________________________

    Fungsi command1 dan command2 sama2 menambah data baru ke MySQL dengan 2 metode berbeda, dengan masing2 kelebihan dan kekurangannya. Silahkan dipilih salah 1

    BalasHapus
  28. bang numpang tanya nich.
    bagaimana cara koneksi mysql tanpa ODBC atau tanpa menginstal yg lainnya juga.
    klo punya abang kan harus menginstal mysqlDirectnya... nah kan mending instal Mysql ODBCNy gi mana?. jika ada minta tolong yach..

    BalasHapus
  29. bang punya ane kok error padahal udah di install smua tuh mulai dari mysql direct...malah masih error dan kluar pesan host is not allowed to connect to this MySql Server
    tapi kalo pake localhost bisa...

    Padahal ane kan pengen konek pake server lain biar bisa digunakan multi user bang...

    mohon petunjuknya ya...

    BalasHapus
  30. @lyricok.blogspot.com: Ga bisa, VB ga punya driver standard untuk MYSQL. Kudu pake konektor, MyODBC atau MySQLDirect diantaranya.

    @Bimbo: Klo di localhost bisa berarti ga ada yang salah dengan VB nya. Kegagalan koneksi karena Host Mysql menolak akses dari si client, dengan kata lain ini masalah Grant Mysql.
    coba ke phpMyAdmin di server, jalanin syntax SQL berikut:
    GRANT ALL PRIVILEGES ON *.* TO 'UserName'@'IPClient';

    UserName=UserName MySQL
    IPClient=IP yang akan diberi hak akses, contoh:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.211';

    Artinya memberi akses penuh untuk client dengan IP 192.168.0.211 dengan username root

    Kalau ingin semua client bisa mengakses, IP nya ganti '%':
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

    Silahkan coba, semoga berhasil

    BalasHapus
  31. mas aku lg buat skripsi..help bgt

    bagaimana cara :
    dari codenya
    MsgBox "Data ke 1 = " & Recset.Fields("Cth1")
    bagaimana cara nya biar keambil smua datanya

    saya pake for next cuman error terus.

    untuk menampilkan di datagrid cara y gmana
    pake dbgrid,datagrid atau apa karena byk jenis grid.
    dan satu lagi data adapter nya
    pake apa adodc,data, aatau adodb

    thanks ..kirm ke email yah..
    n5210_fadli@yahoo.com

    fadli dari surabaya.. di bales yya mas

    BalasHapus
  32. @Fadli:
    Recset.Fields("Cth1") merujuk pada nama fields, anda tidak akan bisa mengambilnya dengan for..next
    Yang paling mudah adalah mengambil data dengan merujuk pada index fieldnya..
    contoh:

    For x=0 to 6
    MsgBox "Data ke" & x & " = " & Recset.Fields(x)
    Next

    struktur program diatas akan menampilkan semua data dari field ke 1(index nya 0) sampai field ke 7(index nya 6)

    Selanjutnya bisa dikembangkan, misalnya menampilkan data ke ListView.
    Anda bisa googling caranya menampilkan data ke listview,
    atau silahkan baca di
    http://vb.web.id/visual-basic-source-code/menampilkan-data-ke-listview-salinan-dari-situs-visual-basic-bersama-masino-sinaga.htm

    BalasHapus
  33. bang gimana supaya menampilkandata memakai flexgrid menjadi lebih cepat...

    BalasHapus
  34. terima kasih atas sarannya, saya lupa dan tidak bermaksud mengabaikan tulisan tersebut, karena memang banyak sekali tulisan seperti itu di internet. jadi kalau andamengklaimnya sekali lagi saya mhon maaf dan sudah saya hapus, dan untuk tulisan saya di blog, silahkan anda kopi pastekan tanpa khawatir di marahi atau terkena sangsi hukum, karena bagi saya ketika sudah masuk internet, berati milik umum yang harus disebar luaskan, terima kasih atas perhatiannya dan sarannya

    BalasHapus
  35. @http://kluthix.blogspot.com: Saya tidak pernah meminta anda menghapus tulisan saya di blog Anda, saya juga tidak memarahi atau memberi sanksi hukum untuk anda :D.. Saya sangat setuju ilmu pengetahuan harus disebarkan. Saya hanya meminta anda sebutkan sumbernya, dan saya rasa itu bukan sesuatu yang memberatkan.

    BalasHapus
  36. @Anonim: Lebih cepat gimana nih? kecepatan MsFlexGrid ya memang standard, usahakan menggunakan algoritma sesederhana mungkin saat mengisi data.

    Saya kasih contoh ya, misal saya punya database MySQL dengan sebuah tabel, misalnya tb_hasilsurvey.

    Buat form baru, tambahin VbMySQLDirect seperti tutorial, trus tmbahin sebuah MS-FlexGrid.

    Code:

    Dim koneksi As New MYSQL_CONNECTION
    Dim rs As New MYSQL_RS

    Private Sub Form_Load()
    koneksi.OpenConnection "localhost", "root", "admin", "surveymanager"
    rs.OpenRs "select * from tb_hasilsurvey", koneksi, 3, 3
    With rs
    'set jumlah Baris dan kolom
    MSFlexGrid1.Rows = .RecordCount + 1
    MSFlexGrid1.Cols = .FieldCount + 1
    .MoveFirst

    Do
    baris = baris + 1
    MSFlexGrid1.Row = baris
    For kolom = 1 To .FieldCount

    MSFlexGrid1.TextMatrix(baris, kolom) = .Fields(kolom)
    Next
    .MoveNext
    Loop Until .EOF
    End With
    End Sub

    Udah.. Semua data dari table tb_hasilsurvey akan muncul di grid dengan relatif cepat..
    Pokonya, semakin sederhana algoritma, semakin cepat program anda bekerja.
    Silahkan dicoba, Semoga membantu..

    BalasHapus
  37. apa bedanya ama odbc,...kudu download2 jg...hahaha
    gw kira pke tools yg ada d VBnya lgsng...klo sama2 download ma ya mending pke ODBC

    BalasHapus
  38. @Mysql: Baca keterangan saya diatas, MyODBC bisa memjadi solusi, tetapi MyODBC memiliki kelemahan dari sisi kecepatan jika data sudah membengkak jumlahnya.

    BalasHapus
  39. kalo kode buat button untuk login,, mencocokannya dngn usernama dan pasword yg udh ada di tbel database mySQL... gmn?? mohon bantuannya..

    BalasHapus
  40. Anonim:
    itu kan mudah, tinggal membandingkan user dan password yg dientry dengan user dan password di database :)

    BalasHapus
  41. Salam kenal, terima kasih tulisannya. sangat membantu saya, semoga sukses Bro.

    BalasHapus
  42. mas ramdan, untuk vbmySQLcrystal untuk membuat ttx nya bisa ngga.
    saya set recorset nya di variable adodc2
    cReport sebagai vbmysqlcrystalDataSource

    set cReport.recordset = adodc2
    cReport.createTTX App.path & "\CrystalData.TTX",True

    BalasHapus
    Balasan
    1. Bang olly...ane lg cari komponen vbmySQLcrystal dimana ya bisa download?

      Hapus
  43. Olly,, saya malah blm coba VbMySQLCrystalnya :D
    nanti saya coba2 dulu.. klo ente udh coba boleh dong di share disini..

    BalasHapus
  44. klo untuk menampilkan data ke datacombo bagaimana ?

    BalasHapus
  45. makasih om...

    ini artikel yg aq cari2... akhirnya dapet jg.

    BalasHapus
  46. bos ramdan, ,

    klo nyimpen data yang berupa tanggal gmn bos?

    aq pake dtpicker pie hasilnya selalu 0000-00-00

    tolong ya bos

    BalasHapus
  47. @Alvanz Nuril Brilliant: format standard vb klo ga salah "mm/dd/yyyy" ya.. diubah dulu format tanggalnya, misalnya: tanggal=format(date1,"yyyy-mm-dd") dimana date1=nilai dari datepikernya. baru insert nilai dari variabel tanggalnya ke mysql.. good luck!

    BalasHapus
  48. Kak, tlog dunk ajarin aq bwad login user dengan sistem koneksi seperti VBMySQLDirect....

    BalasHapus
  49. Yang pasti ada tabel user dengan field username dan password, untuk advance mungkin perlu user level.
    tekniknya sederhana ko, cuma cek user&password yg di entry user dengan yang ada di database.

    untuk sample codingnya request by email aja ya

    BalasHapus
  50. om, gimana cara simpan file gambar ke fields dgn menggunakan mysqldirect...

    BalasHapus
  51. om.. mysqldirect nya ini bisa ngebaca yang dilinux ga ya..

    BalasHapus

Welcome

Selamat datang di blog yang sangat sederhana ini.
Ingin menyumbang Artikel di Blog ini? Silahkan hubungi cool_dan@plasa.com

Created by@

Ramedhan Hermawan