/* */

Thursday, March 31, 2011

Re: [belajar-access] Re: online access



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@gmail.com> wrote:

From: Bambang Mahfudin <bambalid@gmail.com>
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 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