/* */

Sunday, June 12, 2011

Re: [belajar-access] Sepertinya Case Saya Dibawah Menemui Jalan Buntu.



Terima kasih saya haturkan pada milist kita ini, khususnya Pak Haryanto.

Pak Hariyanto, script sudah saya coba dan berhasil.
Sedikit yang saya ingin tanyakan :
1. Jika kita sudah membuat suatu Stored Procedure/Function/Query yang telah kita simpan di MySQL, bagaimanakah cara memanggilnya dengan KLIK dari suatu command button yang kita lekatkan di Ms Access ?
2. pada kutipan script Bapak connToDB "isi dengan IP atau localhost" apakah benar jika MySQL diInstal di Server, dan MS Access terdapat di kompie client, berati ditulis "connToDB "isi dengan IP" ?

Atsa bantuan solusi dan semangat dari Bapak saya ucapkan terima kasih.

Salam,
HerDja

2011/6/12 hari yanto <har_i20002000@yahoo.com>
 


--- On Sat, 11/6/11, Heru Wibowo <heru.wibowo4456@gmail.com> wrote:

From: Heru Wibowo <heru.wibowo4456@gmail.com>
Subject: [belajar-access] Sepertinya Case Saya Dibawah Menemui Jalan Buntu. [1 Attachment]
To: "Belajar Access" <belajar-access@yahoogroups.com>
Date: Saturday, 11 June, 2011, 9:53 PM

 
Bapak - Bapak Moderator,

Apakah, case saya dibawah ini adalah 'jalan buntu' tidak ada jalan lain lagi ?
Mohon petunjuk, jika seperti yang saya inginkan dibawah ini tidak teratasi saya akan mencoba koneksi lain, sebab saya menunggu lama tidak ada jawaba sama sekali, atau saya yang salah alamat yah, seharusnya to MySQL Forum ?
(Saya sadar, Bapak - Bapak moderator juga memiliki kesibukan, tidak hanya sebagai pnegasuh milist)

Saya mencoba untuk melakukan koneksi antara Ms Access sebagai FE dan MySQL sebagai BE.
Bentuk koneksi saya tertarik dengan cara Bp. Hariyanto (Surabaya), yaitu
tidak menggunakan metode Link table, nah mampet deh jalannya (maaf Pak Hari dan Pak Sudarsono) ilmu aku masih dangkal...alias newbie, cara dari Bapak macet untuk saya implementasikan.

Saya menggunakan :
MySQL 5.5
ODBC 5.1.8
Nama Database manag
User root --> localhost --> port 3306
password --> abcd
MS Access 2010 --> bentuk form berisikan field - field sama seperti
           gambar tabel dibawah (demikian pula bentuk tabel di MySQL):
          ---> Sepertinya Gambar tidak ketangkep di body Email, saya sertakan sebagai lampiran aja <---
Yang ingin saya tanyaken :
1. Bagaimana script untuk membuka koneksi antara MS Access dan MySQLnya
Buat script koneksi di Module. Misalnya diberi nama sambungan. Isi dengan ini.
Option Explicit
Public conn As New ADODB.Connection
Public Function connToDB(serverName As String, _
   UserName As String, userPass As String, _
   dbPath As String, dbName As String)
Dim strCon As String
    On Error GoTo errHandle
   
    strCon = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" _
    & serverName & ";DATABASE=" & dbName & ";" & _
    "UID=" & UserName & ";PWD=" & userPass & ";OPTION=16426"
    Set conn = New ADODB.Connection
    conn.Open strCon
    Exit Function
errHandle:
    MsgBox "SERVER SEDANG TIDAK AKTIF", , "NON AKTIF"
    conn.Close
    Set conn = Nothing
End Function
Function KONEKSI()
    connToDB "isi dengan IP atau localhost", "isi_userNameMySql", "ini_passwordMySql", 3306, "isi_nama_database"
End Function

2. Bagaimana script jika koneksi telah tersambung, maka data yang ada
   di MS Access akan terisi otomatis
Untuk menampilkan data di Ms Acces, kita membayangkannya begini. Koneksi dulu. Kalau sukses. SQL (minta data via VBA). Hasilnya ditaruh di Tabel temporer. Tampilkan di form.
Jadi tidak otomatis. Tapi manual. Satu persatu kita definisikan. Misalnya, di dalam form ada sub form dengan nama BU_PROG_1. Maka scriptnya begini:
Function AMBIL_DAT_BUJK()
Dim rss As ADODB.Recordset
Dim db As Database
Dim s_nmbujk, s_bid As Variant
Dim rbs As Recordset
Dim i As Integer
Dim d_a, d_d As Variant
   
    BU_PROG_1.Visible = False 'agar sub form BU_PROG_1 tidak visible
    BU_PROG_1.SourceObject = "" 'agar sub form BU_PROG_1 tidak memiliki
         'source object
    SOLIHAN ("BU_DATA_TEM_9_" & KOM) 'fungsi menghapus dan membuat tabel temporer
    KONEKSI ' koneksi
    d_a = ""
    If conn.State <> 0 Then 'jika sukses > SQL
        Set rss = conn.Execute("SELECT BU_1.ID_LEGES,BU_1.NRBU," _
        & " BU_1.BU_A, BU_LEGES.KLIEN, BU_LEGES.TANGGAL," _
        & " BU_AMBIL.TANGGAL_AMBIL FROM BU_1 LEFT" _
        & " JOIN BU_LEGES ON BU_1.ID_LEGES=BU_LEGES.ID_LEGES" _
        & " INNER JOIN BU_AMBIL ON BU_1.BU_A=BU_AMBIL.BU_A" _
        & " WHERE dTahun='" & F_TAHUN & "'" _
        & " And ID_AS_URUT=" & ID_AS_URUT.Column(0) _
        & " GROUP BY BU_1.nrbu" _
        & " ORDER BY ID_LEGES DESC" _
        & " limit " & batas)
      'limit adalah batas record yang akan diambil misal 0,100; 100,100; dst
    'batas adalah textbox. Defautnya terserah. Misal 0,100 maka yang kita   
    'ambil adalah 100 record pertama. Maka kalau nextnya berarti 100,100;
    '200,100; dst. Jadi sebelum memanggal data kita tetapkan dulu batasnya.
        If Not rss.EOF Then
            Set db = CurrentDb
            i = 0
            Do While Not rss.EOF
                Set rsp = New ADODB.Recordset
                rsp.Open "SELECT NMBUJK FROM" _
                & " BU WHERE NRBU=" & rss.Fields(1), conn
                    If Not rsp.EOF Then
                        s_nmbujk = rsp!NMBUJK
                    Else
                        s_nmbujk = "Not Avalaible"
                    End If
                rsp.Close
                Set rsp = Nothing
                           
                db.Execute "INSERT INTO BU_DATA_TEM_9_" & KOM & " Values (" _
                    & rss.Fields(0) & ",'" _
                    & rss.Fields(3) & "','" & rss.Fields(4) _
                    & "','" & Format(rss.Fields(1), "000000") & "','" _
                    & s_nmbujk & "','" & Nz(rss.Fields(5), 0) & "')"
                rss.MoveNext
                i = i + 1
            Loop
            db.Close
            Set db = Nothing
        End If
        rss.Close
        Set rss = Nothing
       
        Set rss = conn.Execute("SELECT Count(distinct(nrbu),Id_leges) FROM BU_1 WHERE dTahun='" _
        & F_TAHUN & "'" _
        & " And Id_AS_URUT=" & ID_AS_URUT.Column(0))
        If Not rss.EOF Then
            d_a = Nz(rss.Fields(0), 0)
        End If
        rss.Close
        Set rss = Nothing
    End If
    conn.Close
    Set conn = Nothing
   
    JML = ""
    d_a = Fix(d_a / 100) + 1
    If d_a <> 0 Then
        d_d = Split(batas, ",")(0)
        d_d = (d_d / 100) + 1
        D_STAT.Caption = i _
            & " record halaman ke-" & d_d & " dari total halaman " _
            & d_a & " buah"
        JML = d_d
    End If
    DoCmd.Hourglass False
    BU_PROG_1.SourceObject = "BU_AMBIL_DATA_1"
    BU_PROG_1.Form.RecordSource = "SELECT * FROM BU_DATA_TEM_9_" & KOM _
        & " ORDER BY NO_KUI DESC, NMBUJK ASC"
    BU_PROG_1.Visible = True
    BU_PROG_1.Requery
End Function
Ini Fungsi SOLIHAN
Function SOLIHAN(nm)
Dim rbs As Recordset
Dim db As DAO.Database
 
    Set rbs = CurrentDb.OpenRecordset("SELECT MSysObjects.Name" _
    & " FROM MSysObjects WHERE MSysObjects.Type = 1 And MSysObjects.Flags = 0" _
    & " And MSysObjects.Name='" & nm & "'")
        If Not rbs.EOF Then
            Set db = CurrentDb
            db.TableDefs.Delete nm
            db.Close
            Set db = Nothing
           
        End If
    rbs.Close
    Set rbs = Nothing
        DoCmd.RunSQL "CREATE TABLE " & "BU_DATA_TEM_9_" & KOM & " (NO_KUI Number," _
            & " KLIEN Text(100), TGL_MASUK TEXT(100), NRBU Text, NMBUJK Text(80)," _
            & " TGL_AMBIL Text(80));"
       
End Function

3. Bagaimana script untuk melakukan perubahan data di table MySQL, baik
   itu Insert/Delete/Update (yang saya inginkan hal ini dieksekusi disisi
   MySQL, namun perintahnya dipanggil dari MS Access)
Untuk memperlakukan data yang sudah ada. Prosesnya sama. Koneksi > Sql > tampilkan data di Ms Acces > tutup koneksi. Untuk mengupdate, tinggal dibuat script:
conn.execute "update nama_Tabel set nama_field=" & textbox_access _
   & " where id=" & id_diAcces_yang telahditampilkanSebelumnya
Hal sama juga berlaku untuk insert, ataupun delete. Menggunakan sql insert atau delete.

4. Bagaimana script jika koneksi diputus/keluar dari MS Access, maka
   data-data/table di Ms Access ikut terhapus, alias MS Access bersih
   dari table - table tersebut.
Bisa menggunakan pendekatan fungsi Solihan. Menghapus dan membuat tabel.
Semoga bisa membantu dan memberi semangat.
 
Hariyanto (Surabaya)
 


Demikian sekelumit mampetnya jalan yang kutempuh.
Mohon bantuan pencerahan dari rekan - rekan.

Atas bantuannya saya ucapkan terima kasih.




--
HerDja



__._,_.___


SPAM IS PROHIBITED



Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___

No comments:

Post a Comment