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.
No comments:
Post a Comment