/* */

Thursday, March 31, 2011

[belajar-access] Re: online access

Saya numpang komentar

mungkin akan lebih mudah di pahami bila kode tsb berada di module dan module event dari database access. Module2 tsb akan tetap jalan di tabel access ( untuk memcoba jadi tak perlu MYSQL , sementara saja ). Mungkin perlu penyesuaian.
Baru ketika aplikasi sudah ok , tabel2 tsb dapat di migrasikan ke MySQL.
Saya coba analisa sedikit

1. Module pendukung :
1.1. AMBIL_SBU -- membuat nama file temporary
1.2. KOM -- mengambil nama komputer
1.3. TrimNull -- memanggil WinAPI ( biasanya dibuat dalam
bahasa C , maka setiap string diakhir oleh NULL ,
chr$(0) )
2. MSysObjects adalah Table system dari Database Access yg berisi
info semua table, query , dsb
3. BUAT_TABEL -- menghapus tabel ( jika ada di tabel defini ).
Lalu buat tabel.
4. KOKO -- menambah field AMBIL dan FC bertipe Yes/No
5. Koneksi -- koneksi ke MySQL Server ( untuk test sementara
dapat diabaikan , karena untuk menyederhanakan kasus)
6. Lanjut , menyimpan data dari tabel ke table temporary, hal ini
dapat di lihat dari
Set st = CurrentDb.OpenRecordset(AMBIL_SBU)
AMBIL_SBU adalah textbox yang berisi nama file temporary
yg di hasilkan dari fungsi AMBIL_SBU
sepertinya text Ambil_sbu di ganti namanya menjadi TxtAmbil_SBU
agar memudahkan dalam ha debuging

'======

'==== untuk sementara itu saja ya
Pak Har mungkin dpt menambahkan
trim's, pak Har atas kodingnya



--- In belajar-access@yahoogroups.com, "Bambang Mahfudin" <bambalid@ wrote:

Pak Har...
Bagi saya ini bukan code-code yg gampang difahami perlu beberapa hari untuk mengerti dan mencoba selangkah demi selangkah. Kalopun macet mohon dibimbing.

Dg code ini artinya saya tidak perlu lagi ada tabel Order & OrderDetail di FE yang 'Link' ke BE ??? Cukup 2 temporer tabel tadi sbg gantinya. Karena `bisanya' saya hanya main link saja :) ( FE & BE Access )

Dan apakah table temporer itu dibuat hanya untuk menyimpan data-data yg dipilih saja yg akan ditampilkan di form. Supaya loading formnya cepat. Jadi tidak semua data dibaca oleh form seperti kalo kita bikin form dg record sourcenya mengarah langsung ke tabel ( Order/OrderDetail)

Poin nomor 5 ada proses pembuatan dan penghapusan tabel? Apa ini tidak membuat ukuran file FE menjadi semakin gemuk

Maaf banyak bertanya. Terima kasih sebelumnya

SalamAccess
BambangMahfudin




--- In belajar-access@yahoogroups.com, hari yanto <har_i20002000@ wrote:

Benar... Dalam kasus sampeyan, sepertinya perlu dibuat tabel temporer 2 buah.

Teknisnya begini (kasus ini hanya membuat dan mengisi satu tabel):

1. kita definisikan dulu nama komputer yang akan mengakses. Saya pakai fungsi berikut (saya taruh di modul, karena saya gunakan dibanyak form):

Option Explicit
'*********** Code Start ************
' This code was originally written by Terry Kreft.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Terry Kreft
'
Public Const IDC_APPSTARTING = 32650&
Public Const IDC_HAND = 32649&
Public Const IDC_ARROW = 32512&
Public Const IDC_CROSS = 32515&
Public Const IDC_IBEAM = 32513&
Public Const IDC_ICON = 32641&
Public Const IDC_NO = 32648&
Public Const IDC_SIZE = 32640&
Public Const IDC_SIZEALL = 32646&
Public Const IDC_SIZENESW = 32643&
Public Const IDC_SIZENS = 32645&
Public Const IDC_SIZENWSE = 32642&
Public Const IDC_SIZEWE = 32644&
Public Const IDC_UPARROW = 32516&
Public Const IDC_WAIT = 32514&
Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias _
"LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Private Const MAX_COMPUTERNAME As Long = 15
Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
Private Function TrimNull(item As String)
'return string before the terminating null
Dim pos As Integer

pos = InStr(item, Chr$(0))

If pos Then
TrimNull = Left$(item, pos - 1)
Else
TrimNull = item
End If

End Function
Function KOM()
Dim tas As String
'pre-load the text boxes with
'the local computer name for testing
tas = Space$(MAX_COMPUTERNAME + 1)
Call GetComputerName(tas, Len(tas))

KOM = TrimNull(tas)
If KOM Like "*-*" Then
KOM = Replace(KOM, "-", "_")
End If
End Function

'fungsi ini untuk menyederhanakan panggilan
Function AMBIL_SBU()
AMBIL_SBU = "BU_PENGAMBIL_" & KOM
End Function

2. Form dan subform yang akan ditampilkan tidak ada recordsourcenya. Misalnya, Form utama berisi text box dengan nama dAmb. Terus ada sub formnya bernama BU_AMBIL_1, sourceobject-nya dikosongi. Buat juga form BU_AMBIL_1 (tanpa recordsource), untuk nanti diletakkan pada subform utama.

3. Maka, kalau form utama dibuka, akan kosong dan ringan. Sekarang, kita bayangkan user sedang memasukkan nilai pada text box dAmb. Terus dia menekan enter dan berharap mengeluarkan data sesuai permintaanya.
Untuk sesuai harapan user, kita beri event after update pada text box dAmb. Sebelum masuk ke database, sebaiknya divalidasi dulu, apakah type data sesuai dengan type data database.
Gampangnya seperti ini:

If IsNumeric(dAmb) Then
dAmb = Fix(dAmb)
BU_AMBIL_1.Visible = False 'agar tidak tampil sementara
BU_AMBIL_1.SourceObject = "" 'agar kita bisa mengisi data
Lanjut
Else
MsgBox "MASUKKAN KARAKTER ANGKA. JANGAN HURUF ATAU KARAKTER LAINNYA"
dAmb = ""
dAmb.SetFocus
End If

4. Sebelum masuk ke fungsi lanjut, saya buat query dengan isi sql sbb:

SELECT MSysObjects.Name AS TABEL
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0))
ORDER BY MSysObjects.Name;

5. Buat fungsi dengan tujuan membuat/menghapus tabel kalau user melakukan aksi

Function BUAT_TABEL()
Dim db As DAO.Database
Dim rbs As Recordset

'melihat ada tidaknya tabel leges user
Set rbs = CurrentDb.OpenRecordset("SELECT TABEL FROM NAMA_TABEL" _
& " WHERE TABEL='" & AMBIL_SBU & "'")
'kalau ada tabel dihapus
If Not rbs.EOF Then
Set db = CurrentDb
db.TableDefs.Delete AMBIL_SBU
db.Close
Set db = Nothing
End If
rbs.Close

'sekarang membuat tabel, sesuaikan field-field sesuai kebutuhan user. Tidak semua harus ditampilkan.
DoCmd.RunSQL "CREATE TABLE " & AMBIL_SBU & " (ID_LEGES Number, BEDA Number," _
& " ID_BU Number, ID_BU_1 Number, NO_AMBIL Number, KLIEN Text(80)," _
& " TANGGAL Text(30), NRBU Text, NMBUJK Text(80), ID_SUBBID_BU Number," _
& " GRADE Number, KLIEN_AMBIL Text(80), BID Number," _
& " TANGGAL_AMBIL Text(30), AMBIL YesNo, FC YesNo);"

KOKO
'fungsi koko untuk memperlihatkan YesNo seperti yang biasa kita lihat (menjadi check box).

end function

Function KOKO()
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim db As Database
Dim strSQL As String
Dim prp As DAO.Property
Set db = CurrentDb

'It is now in the table collection, so ...
Set tdf = db.TableDefs(AMBIL_SBU)

'Change the way the YesNo fields display.
'A Checkbox
Set fld = tdf.Fields("AMBIL")
Set prp = fld.CreateProperty("DisplayControl", dbInteger, acCheckBox)
fld.Properties.Append prp

Set fld = tdf.Fields("FC")
Set prp = fld.CreateProperty("DisplayControl", dbInteger, acCheckBox)
fld.Properties.Append prp

db.Close
Set db = Nothing

End Function


6. Sekarang masuk ke fungsi lanjut.

Function lanjut()
Dim st As Recordset
Dim rsj, rsp As ADODB.Recordset

BUAT_TABEL
KONEKSI
If conn.State < 0 Then
'koneksi sukses, kita meminta/lihat data di database (contoh ini pakai MySql)
Set rsp = New ADODB.Recordset
rsp.Open "SELECT * FROM" _
& " BU_1 WHERE ID_LEGES=" & dAmb _
& " ORDER BY NRBU ASC, ID_SUBBID_BU ASC", conn
If Not rsp.EOF Then
'kalau data ada, lakukan pengisian (data semua) ke tabel temporer
Do While Not rsp.EOF
Set st = CurrentDb.OpenRecordset(AMBIL_SBU)
st.AddNew
st!BEDA = Nz(DMax("[BEDA]", AMBIL_SBU, ""), 0) + 1
st!NO_AMBIL = rsp!bu_a
st!id_bu_1 = rsp!id_bu_1
If IsNull(rsp!ID_LEGES) Then
Else
Set rsj = New ADODB.Recordset
rsj.Open "SELECT * FROM" _
& " BU_LEGES WHERE ID_LEGES=" & rsp!ID_LEGES, conn
If Not rsj.EOF Then
st!KLIEN = rsj!KLIEN
st!TANGGAL = rsj!TANGGAL
End If
rsj.Close
Set rsj = Nothing

End If
st!NRBU = Format(rsp!NRBU, "000000")
st!ID_LEGES = rsp!ID_LEGES

Set rsj = New ADODB.Recordset
rsj.Open "SELECT NMBUJK FROM" _
& " BU WHERE NRBU=" & rsp!NRBU, conn
If Not rsj.EOF Then
st!NMBUJK = rsj!NMBUJK
End If
rsj.Close
Set rsj = Nothing

st!ID_SUBBID_BU = rsp!ID_SUBBID_BU
st!BID = Left(rsp!ID_SUBBID_BU, 2)
st!GRADE = rsp!GRADE
st!FC = rsp!FC
If IsNull(rsp!bu_a) Then
Else
Set rsj = New ADODB.Recordset
rsj.Open "SELECT * FROM" _
& " BU_AMBIL WHERE BU_A=" & rsp!bu_a, conn
If Not rsj.EOF Then
st!klien_ambil = rsj!klien_ambil
st!TANGGAL_AMBIL = rsj!TANGGAL_AMBIL
End If
rsj.Close
Set rsj = Nothing
End If
st.Update
st.Close
Set st = Nothing
rsp.MoveNext
Loop
End If
rsp.Close
Set rsp = Nothing
End If
conn.Close
Set conn = Nothing
' ini untuk memberi source object sub form BU_AMBIL_1, yang defaultnya kosong.
'proses ini tidak terlihat karena masih dalam posisi unvisible
BU_AMBIL_1.SourceObject = "BU_AMBILEN_1"
'ini memberi recordsource utk subform. Sebelumnya nama-nama texbox sudah disesuaikan dengan tabel temporer
BU_AMBIL_1.Form.RecordSource = AMBIL_SBU
dAmb.SetFocus
'bila proses sudah selesai, sub form baru di visible kan
BU_AMBIL_1.Visible = True

End Function


Terlalu panjang ya.....? Itulah yang harus kita lalui. Saya berpendapat, lebih baik bersakit-sakit dahulu. Kalau suatu saat nanti beralih ke bahasa pemrograman lain (PHP, dlsb), akan lebih mudah. Karena prinsip yang digunakan sama.

Ada saatnya kita menggunakan Ms Acces, ada saat pula kita memakai yang lainnya.. (kalau kita ingin maju terus). Saya sendiri bisa sedikit PHP, ya dari upaya memahami liku-liku VBA dan VB. Tanpa VBA dan Ms Acces, saya tidak mungkin bisa PHP. Karena dari sanalah saya bermula. (Hasil kombinasi Ms Acces, VBA, PHP, HTML, dan sedikit Java, bisa dilihat di ini: http://110.139.57.19/)

Semoga bisa membantu dan memberi semangat...

Hariyanto (Surabaya)

--- On Thu, 31/3/11, Bambang Mahfudin <bambalid@ wrote:


From: Bambang Mahfudin <bambalid@
Subject: [belajar-access] Re: online access
To: belajar-access@yahoogroups.com
Date: Thursday, 31 March, 2011, 10:13 AM






Mohon penjelasan Pak Hariyanto,

Saya belum begitu paham yg dimaksud dg `Tabel Temporer' , conto kasusnya misal pada form Penjualan Detail dimana saya biasanya mengambil/membuka data-data dari 2 tabel :
1. Tabel Order ( Tgl, Customer, OrderNo, TotalInvoice, Deposit, dll €¦ )
2. Tabel OrderDetail ( Code, QtyOrder, Harga dll €¦. )

Apakah saya harus bikin 2 tabel temporer (table order & orderdetail)
Data didalamnya diambil pakai metoda link apa import untuk 2 tabel temporer tsb. Terima kasih sebelumnya.

SalamAccess
BambangMahfudin

--- In belajar-access@yahoogroups.com, hari yanto <har_i20002000@ wrote:

Namun ketika beberapa user memasukkan data pada waktu bersamaan, terjadi hal-hal yang tidak saya inginkan. User A mengambil alih data user yang dientry B. Begitu seterusnya. Setelah saya pelajari, salah satu sebabnya adalah karena record subform sama. (dampak lainnya, kalau salah satu user menghapus, di form user lain akan tampil tulisan deleted# deleted#).
Â
Maka, masuklah saya ke VBA. Saya arahkan agar sub form memiliki control source berbeda-beda. Sesuai nama komputer user masing-masing. Usai sudah... Masing-masing user bisa mengentry sesuai data yang dia bawa.
Â
Namun karena data makin lama makin banyak. Proses sortir, pengakuan, dan insert data menjadi lambat. Maka, saya masuk ke database MySql. Terus saya bandingkan hasilnya. Ternyata memakai database MySql dan interface Ms Access, kecepatannya lebih tinggi dibandingkan apabila databasenya Ms Access.
Â
Gambaran kongkret interface Ms Acces dan database MySql saya begini:
Â
1. Database Mysql, ya database (BE). Kayak gudang. Tempat menyimpan data. Statusnya diam.
2. Ms Acces saya perlakukan sebagai interface. Antar muka. FE.
3. Untuk melakukan komunikasi ke gudang data (database), saya pakai ADOBD. ODBC manual. Akan melakukan komunikasi/koneksi kalau diperintahkan. Kenapa? Agar interface tidak meload semua data. Sehingga menjadi lebih ringan.
4. Untuk menampilkan data, proses yang harus dilalui adalah

Hilangkan recordsource form
hapus dan buat  tabel temporer berdasarkan nama komputer (atau IP)
koneksiÂ
bila sukses meminta data berdasarkan sql (tentu dengan diberi batasan jumlah data, misalnya 0,100 data pertama sebanyak 100 buah)
masukkan data hasil sql ke tabel temporer
tampilkan record source form
tampilkan data ke form
tutup koneksi
5. Untuk menghapus: id data yang berhasil ditampilkan kita jadikan pegangan untuk eksekusi. Caranya:

koneksiÂ
Eksekusi delete database MySql berdasarkan ID
tutup koneksi
Hilangkan recordsource form
Eksekusi delete Tabel temporer berdasarkan ID
tampilkan record source form
6. Untuk update data prosesnya sama.
Â
Dengan memakai database terpisah, user tidak bisa seenaknya melakukan perubahan. Perubahan hanya dapat dilakukan sesuai dengan yang kita kehendaki. Begitu pula proses delete.
Â
Itu untuk proses entry, edit, delete, update data.
Â
Sedangkan untuk bagian lain yang hanya bersifat melihat. Kita harus definisikan dulu, nama komputernya. Kalau nama komputer untuk proses entry, edit, delete, update data, kita arahkan form khusus untuk mereka. Begitu pula bila hanya untuk melihat, kita arahkan khusus untuk melihat. Yang itu berarti, tidak ada aksi VBA update, delete, atau insert.
Â
Di MySql, kita bisa tetapkan user-user tertentu saja, misalnya yang memilki otorisasi penuh. Sementara user lain hanya select saja.
Â
Semoga bisa membantu dan memberi semangat...
Â
Â
Hariyanto (Surabaya)
Â

--- On Wed, 30/3/11, hari yanto <har_i20002000@ wrote:


From: hari yanto <har_i20002000@
Subject: Re: [belajar-access] Re: online access
To: belajar-access@yahoogroups.com
Date: Wednesday, 30 March, 2011, 4:23 PM


Â








Kalau pengalaman saya yang pernah saya jalani di kantor saya begini:

Saya buat 1 file mdb sebagai interface (Front End) sekaligus database. Saya taruh di salah satu komputer/server pada folder yang sudah disetting share. Sehingga semua komputer yang berada di dalam jaringan, bisa mengakses file mdb tersebut.
Â
Karena kadang-kadang salah satu komputer tidak dapat mengakses ketika membuka folder terus mengklik file tersebut, di masing-masing komputer user saya beri icon yang mengarah ke alamat mdb (pada folder yang share). Hasilnya, bisa jalan.
Â
Â
Â

--- On Wed, 30/3/11, sudarsono <jkssbma@ wrote:


From: sudarsono <jkssbma@
Subject: [belajar-access] Re: online access
To: belajar-access@yahoogroups.com
Date: Wednesday, 30 March, 2011, 1:24 PM


Â


saya belum pernah membuat dan menguji aplikasi secara real. Saya mencoba mengakses data ( BE ) di komputer lain dalam satu jaringan ( shared folder ). Untuk pengujian aplikasi , mungkin kepada mereka yang biasa membuat aplikasi dan mengimplementasikan kpd pemakai ( biasa nya yg jualan aplikasi yg lebih tahu ).

maaf saya tak bisa menjawab pertanyaannya
'==============
--- In belajar-access@yahoogroups.com, Hendra Agestha Hamid <the_agestha@ wrote:

Nah,,,sekalian juga tentang hal ini mas,,,ttg Acces di jaringan ini banyak
sekali yg interest.
Sekalian saya mau nanya misal sebuah file BE mdb di akses bersamaan pada
jaringan (Misal DATA.mdb) di akses oleh 4 user dengan 2 model yaitu
- model 1 : 4 user semua input data
- model 2 : 2 user input data dan 2 user cuma akses baca data dan print laporan
pertanyaan saya apakah beban kerja/performance file DATA.mdb tsb sama beratnya
pada tiap2 model tsb..?, intinya apakah proses baca data dan input data
membutuhkan beban kerja yg sama jika sbg BE dalam sebuah jaringan..
tengkyu mas





________________________________
From: sudarsono <jkssbma@
To: belajar-access@yahoogroups.com
Sent: Tue, March 29, 2011 4:32:35 PM
Subject: [belajar-access] Re: online access



Kirim aja file mdb nya ,nanti saya kirim kan screenshot ( kalau saya berhasil
meng-online-kan ).
semoga nanti dapat menyelesaikan masalah kamu

'============

--- In belajar-access@yahoogroups.com, "Piko" <septian_bgt@ wrote:


jika form terpisah lalu bagaimana menghubungkan ke tabel tabel yang ada di
komputer lain?
--- In belajar-access@yahoogroups.com, Darsono <darsono72@ wrote:

Hallo Septian,
Online Access,ÃÆ'â ‚¬Å¡ itu dambaan saya beberapa waktu yang lalu.dan jawabannya
bisa,apalagi hanya sekedar di dalam LAN, lewat jaring Internet-pun bisa
untuk jaringan LAN, siapkan tabel-tabel di satu komputer anggap sebagai
server,terus siapkan form terpisah di masing-masing komputer misalnya A, B ,C
dst
terus belajar.
Darsono


--- On Tue, 3/29/11, Piko <septian_bgt@ wrote:

From: Piko <septian_bgt@
Subject: [belajar-access] online access
To: belajar-access@yahoogroups.com
Date: Tuesday, March 29, 2011, 1:05 PM
















ÃÆ'â ‚¬Å¡









para pakar access, apakah aplikasi yang kita buat di access bisa kita
buat online ??terhubung ke jaringan, misal aplikasi yang saya buat di pakai di 2
komputer yang berbeda, jika user A mengisi data di komp A, lalu di komp B milik
user B langsung terintegrasi. Dimana data yang diinput oleh user A tadi tampil
di aplikasi milik user B. Dengan kondisi aplikasi access berupa sama

Mohon penjelasannya







------------------------------------

SPAM IS PROHIBITEDYahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/belajar-access/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/belajar-access/join
(Yahoo! ID required)

<*> To change settings via email:
belajar-access-digest@yahoogroups.com
belajar-access-fullfeatured@yahoogroups.com

<*> To unsubscribe from this group, send an email to:
belajar-access-unsubscribe@yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/

No comments:

Post a Comment