Maturnuwun Mas Kid, Penjelasannya Padat dan jelas. Sepertinga saya akan menggunakan back end berupa access database (accdb) dengan stored procedure. belum mempertimbangkan ke MySQL atau yang lain karena IT admin tidak mengijinkan saya untuk install program baru
Thanks, -zainul #dikirim_pakai_mail.yahoo.com_tanpa_pulsa# -------------------------------------------- On Wed, 20/12/17, 'Mr. Kid' mr.nm...@gmail.com [belajar-excel] <belajar-excel@yahoogroups.com> wrote: Subject: Re: [belajar-excel] Share Workbook yang ada excel table-nya To: "BeExcel" <belajar-excel@yahoogroups.com> Date: Wednesday, 20 December, 2017, 10:57 PM Wa'alaikumussalam wr wb mas Zainul, By design : Excel workbook ketika dibuka selalu berusaha untuk Exclusive (memberi hak write ke seorang user saja) Fitur shared workbook :Fitur ini berusaha untuk memberi hak Exclusive kepada lebih dari seorang user. Tetapi, fitur ini memberi batasan ketika ada lebih dari seorang user yang akan mengubah isi cells (sila lihat di menu Share Workbook tab Advanced bagian Conflicting blabla). Cells yang diubah bisa jadi masih kosong (blank cells) maupun sudah ada isinya.Artinya, shared workbook cukup beresiko untuk dimanfaatkan dalam proses penyimpanan data, karena diusahakan sebisa mungkin data yang disimpan dapat terjaga utuh. Sedangkan fitur ini memungkinkan terjadinya kondisi data yang benar (hasil input user A) akan terubah oleh data yang benar lainnya (hasil input user B), sehingga data akan kehilangan records yang benar. Aplikasi entri data :Pada umumnya, sistem data akan membentuk setidaknya 2 layer, yaitu : 1. Back end data; 2. Interface.Back end data bisa di text file, Excel file, database (direkomendasikan) Interface bisa berupa add in, xlsm atau xlsb file, desktop application lainnya, dan web base app (biasanya akan terbentuk 3 layer [three tier]) Back end data dengan Text file dan Excel :Hak akses terhadap dua format file ini adalah Exclusive. Jadi, proses penulisan data ke back end harus dibuatkan sendiri antriannya. Back end data dengan database : (apapun database-nya, mulai dari MS Access, SQL Server, Oracle, MySQL, dsb yang berupa DBMS)Hak akses terhadap database adalah shared dengan management share write dan read yang sudah baik. Jadi tidak perlu repot membuatkan antrian proses penulisan data. Kasus Back End Data dengan Excel : (misal diatur)1. back end data dengan Excel bernama myData.xlsx (TIDAK shared workbook) 2. interface berupa add-in atau xlsm atau xlsb (direkomendasikan), TETAPI membuka back end myData.xlsx hanya sesuai keperluan saja, yaitu saat akan menulis data dan saat akan membaca data saja * Open - write - save - close atau Open - read - close :: jangan sampai menunggu respon dari user, apalagi user langsung entri atau edit di myData.xlsx Prosedur antrian penulisan data bisa sebagai berikut : 'deklarasi variabel proses dim wbkApp as workbook, rngInput as range, wbkDB as workbook, shtDT as worksheet 'init records di interface yang akan ditulis ke back end set wbkAPP = thisworkbook set rngInput=wbkapp.sheets("area input data").range("a2:c17") 'cek antrianCOBA_BUKA: set wbkdb=workbooks.open( wbkapp.path & "\myData.xlsx" ) if wbkdb.readonly then wbkdb.close false goto COBA_BUKA endif 'proses tulis [kalau sampai di baris ini, berarti back end data telah menyerahkan hak write secara exclusive kepada wbkApp melalui wbkDB set shtdt=wbkdb.sheets("DATA") 'misal nama sheet lokasi penulisan adalah 'DATA' rnginput.copy shtdt.cells( shtdt.rows.count , "A" ).end(xlup).offset(1).pastespecial xlpastevalues wbkdb.close true 'save n close wbkdb 'pesan selesai kepada user msgbox "Selesai.",vbinformation,"Tulis ke xlDBFile" Catatan : Pada proses di atas, file myData.xlsx bisa berisi excel table, excel query table, excel pivot table, dan sebagainya. Tapi, penulisan data tetap di suatu range (jika range tepat dibawah Excel Table, maka Excel Table akan autoresize barisnya). Obrolan :Penggunaan database (dbms) sebagai back end sangat dianjurkan. Proses penulisan data bisa dengan banyak cara. Secara umum, urutan proses penulisan data adalah open connection - execute Insert atau Update query - Close connection Varian proses execute insert atau update query bisa jadi dengan set setiap nilai field lalu diakhir commit. Tapi saya kurang suka cara ini, terlalu banyak baris script-nya dan kurang cepat untuk penulisan records yang banyak sekaligus. Excel Table bisa dimanfaatkan untuk menyusun bunyi query insert atau update di sebuah kolom dalam Excel Table (kolom ini bisa di-hide). Lalu execute dilakukan dengan loop seluruh isi kolom tersebut.Untuk records yang sangat banyak, tentu hal ini akan memakan waktu dalam melakukan loop (BUKAN pada eksekusi query-nya). Data yang sangat banyak biasanya akan menggunakan DBMS yang besar, seperti SQL Server (edisi Express bisa 10GB tanpa trik, dan bisa dijadikan multi database jika data lebih dari 10GB).Dengan DBMS seperti SQL Server, akan ada lebih banyak opsi dalam penulisan data, mulai dari pass through query (saya kurang suka cara ini, karena terlalu lambat untuk ukuran kerja sebuah DBMS sekelas SQL Server), programming dengan Stored Precedure (SP), dan sebagainya. Input data di Excel, database di SQL Server, jumlah records cukup banyak (misal sekitar 200K records), dengan membuat SP di dalam database dan SP dieksekusi oleh Excel, maka proses penulisan data bisa cuma beberapa detik saja (relatif terhadap spesifikasi komputer ya). Sedangkan dengan loop execute query insert bisa sekitar 1 sampai 2 menit. Wassalamu'alaikum wr wbKid 2017-12-20 12:51 GMT+07:00 zainul_u...@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com>: Dear Be-excel,Saya mulai thread dari jawaban Mas Kid mengenai shared workbook. Latar belakang: Saya membuat aplikasi vba excel dalam bentuk addin (extensi xlam) untuk otomatisasi sebuah file excel yang saya pakai sebagai database (excel-database). Pada file excel-database tersebut terdiri dari beberapa sheet yang berisi data berupa excel table. Seiring dengan perkembangan penambahan data tiap hari, saya berencana menge-set excel-database tersebut menjadi multi-user dengan setting shared workbook tetapi saat diset sebagai shared workbook, program excel menginformasikan bahwa tool shared workbook tidak bisa digunakan kalo terdapat object excel table dalam workbook. Pertanyaan / bahan diskusi:1. Apakah ada cara lain agar bisa sharing workbook yang ada object excel table nya?2. Jika nomer #1 tidak bisa, saya berencana mengkonversi excel-database tersebut ke microsoft access (*.accdb) , tetapi proses input dan output tetap di excel.saya telah membuat vba code sederhana untuk connect ke access sbb:'============================= ========Option ExplicitConst sProvider As String = "Microsoft.ACE.OLEDB.12.0"Dim sConnString As StringDim cnn As ADODB.Connection Private Function CanConnectAccess(DbFile As String, rtnErr As String) As Boolean sConnString = "Provider=" & sProvider & ";" & _ "Data Source=" & DbFile & ";" & _ "Persist Security Info=False;" 'create a new connection to access database CanConnectAccess = True rtnErr = vbNullString Set cnn = New ADODB.Connection On Error Resume Next cnn.Open sConnString If Err..Number Then rtnErr = Err.Description CanConnectAccess = False Err.Clear End IfEnd Function'============================= =dari vba code di atas, bagian mana yang perlu dirubah agar database access bisa untuk multi user? Terimkasih banyak sebelumnya. Mohon maaf jika terlalu panjang. Wassalamu'alaikum wr wb.-zainul #yiv3560235441 #yiv3560235441 -- #yiv3560235441ygrp-mkp { border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 10px;} #yiv3560235441 #yiv3560235441ygrp-mkp hr { border:1px solid #d8d8d8;} #yiv3560235441 #yiv3560235441ygrp-mkp #yiv3560235441hd { color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 0;} #yiv3560235441 #yiv3560235441ygrp-mkp #yiv3560235441ads { margin-bottom:10px;} #yiv3560235441 #yiv3560235441ygrp-mkp .yiv3560235441ad { padding:0 0;} #yiv3560235441 #yiv3560235441ygrp-mkp .yiv3560235441ad p { margin:0;} #yiv3560235441 #yiv3560235441ygrp-mkp .yiv3560235441ad a { color:#0000ff;text-decoration:none;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ygrp-lc { font-family:Arial;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ygrp-lc #yiv3560235441hd { margin:10px 0px;font-weight:700;font-size:78%;line-height:122%;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ygrp-lc .yiv3560235441ad { margin-bottom:10px;padding:0 0;} #yiv3560235441 #yiv3560235441actions { font-family:Verdana;font-size:11px;padding:10px 0;} #yiv3560235441 #yiv3560235441activity { background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;} #yiv3560235441 #yiv3560235441activity span { font-weight:700;} #yiv3560235441 #yiv3560235441activity span:first-child { text-transform:uppercase;} #yiv3560235441 #yiv3560235441activity span a { color:#5085b6;text-decoration:none;} #yiv3560235441 #yiv3560235441activity span span { color:#ff7900;} #yiv3560235441 #yiv3560235441activity span .yiv3560235441underline { text-decoration:underline;} #yiv3560235441 .yiv3560235441attach { clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 0;width:400px;} #yiv3560235441 .yiv3560235441attach div a { text-decoration:none;} #yiv3560235441 .yiv3560235441attach img { border:none;padding-right:5px;} #yiv3560235441 .yiv3560235441attach label { display:block;margin-bottom:5px;} #yiv3560235441 .yiv3560235441attach label a { text-decoration:none;} #yiv3560235441 blockquote { margin:0 0 0 4px;} #yiv3560235441 .yiv3560235441bold { font-family:Arial;font-size:13px;font-weight:700;} #yiv3560235441 .yiv3560235441bold a { text-decoration:none;} #yiv3560235441 dd.yiv3560235441last p a { font-family:Verdana;font-weight:700;} #yiv3560235441 dd.yiv3560235441last p span { margin-right:10px;font-family:Verdana;font-weight:700;} #yiv3560235441 dd.yiv3560235441last p span.yiv3560235441yshortcuts { margin-right:0;} #yiv3560235441 div.yiv3560235441attach-table div div a { text-decoration:none;} #yiv3560235441 div.yiv3560235441attach-table { width:400px;} #yiv3560235441 div.yiv3560235441file-title a, #yiv3560235441 div.yiv3560235441file-title a:active, #yiv3560235441 div.yiv3560235441file-title a:hover, #yiv3560235441 div.yiv3560235441file-title a:visited { text-decoration:none;} #yiv3560235441 div.yiv3560235441photo-title a, #yiv3560235441 div.yiv3560235441photo-title a:active, #yiv3560235441 div.yiv3560235441photo-title a:hover, #yiv3560235441 div.yiv3560235441photo-title a:visited { text-decoration:none;} #yiv3560235441 div#yiv3560235441ygrp-mlmsg #yiv3560235441ygrp-msg p a span.yiv3560235441yshortcuts { font-family:Verdana;font-size:10px;font-weight:normal;} #yiv3560235441 .yiv3560235441green { color:#628c2a;} #yiv3560235441 .yiv3560235441MsoNormal { margin:0 0 0 0;} #yiv3560235441 o { font-size:0;} #yiv3560235441 #yiv3560235441photos div { float:left;width:72px;} #yiv3560235441 #yiv3560235441photos div div { border:1px solid #666666;min-height:62px;overflow:hidden;width:62px;} #yiv3560235441 #yiv3560235441photos div label { color:#666666;font-size:10px;overflow:hidden;text-align:center;white-space:nowrap;width:64px;} #yiv3560235441 #yiv3560235441reco-category { font-size:77%;} #yiv3560235441 #yiv3560235441reco-desc { font-size:77%;} #yiv3560235441 .yiv3560235441replbq { margin:4px;} #yiv3560235441 #yiv3560235441ygrp-actbar div a:first-child { margin-right:2px;padding-right:5px;} #yiv3560235441 #yiv3560235441ygrp-mlmsg { font-size:13px;font-family:Arial, helvetica, clean, sans-serif;} #yiv3560235441 #yiv3560235441ygrp-mlmsg table { font-size:inherit;font:100%;} #yiv3560235441 #yiv3560235441ygrp-mlmsg select, #yiv3560235441 input, #yiv3560235441 textarea { font:99% Arial, Helvetica, clean, sans-serif;} #yiv3560235441 #yiv3560235441ygrp-mlmsg pre, #yiv3560235441 code { font:115% monospace;} #yiv3560235441 #yiv3560235441ygrp-mlmsg * { line-height:1.22em;} #yiv3560235441 #yiv3560235441ygrp-mlmsg #yiv3560235441logo { padding-bottom:10px;} #yiv3560235441 #yiv3560235441ygrp-msg p a { font-family:Verdana;} #yiv3560235441 #yiv3560235441ygrp-msg p#yiv3560235441attach-count span { color:#1E66AE;font-weight:700;} #yiv3560235441 #yiv3560235441ygrp-reco #yiv3560235441reco-head { color:#ff7900;font-weight:700;} #yiv3560235441 #yiv3560235441ygrp-reco { margin-bottom:20px;padding:0px;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ov li a { font-size:130%;text-decoration:none;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ov li { font-size:77%;list-style-type:square;padding:6px 0;} #yiv3560235441 #yiv3560235441ygrp-sponsor #yiv3560235441ov ul { margin:0;padding:0 0 0 8px;} #yiv3560235441 #yiv3560235441ygrp-text { font-family:Georgia;} #yiv3560235441 #yiv3560235441ygrp-text p { margin:0 0 1em 0;} #yiv3560235441 #yiv3560235441ygrp-text tt { font-size:120%;} #yiv3560235441 #yiv3560235441ygrp-vital ul li:last-child { border-right:none !important; } #yiv3560235441