Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

3
Laws of Game Programming

  1. Real game programmers aren't afraid of mathematics.
  2. Real game programmers never use bubble-sort.
  3. Real games are coded in C++ with low-level routines coded in assembly language.
  4. Real games have real music written by musicians, and real art drawn by artists.
  5. Never optimize a piece of code before its time.
  6. Profile before you optimize.
  7. If it looks right on the screen, then it is right.
  8. If it moves, blit it. If it doesn't move, skip it.
  9. Never be afraid to throw code out.
  10. Don't go home each day until your game (in whatever state it is in) compiles and runs without crashing.
  11. Make a game that even a fool can win, and only a fool will want to play it.
  12. Fools have money too.
  13. At best, graphics libraries can only please some of the people some of the time.
  14. Use programmer's art until your game is playable.
  15. Artificial Intelligence isn't.
  16. No matter what you do, your game will appear on the pirate bulletin boards.
---
oleh : Ian Parberry
links lengkapnya dah lupa, ketemu tu artikel dulu pas googling nyari referensi OpenGL bwt tugas besar game pake Visual C++. jadul seeh... cuman iseng aja pengen posting di sinie...

0
Apa itu "User Friendly"?

  • Menunjuk pada kemampuan yang dimiliki software/program aplikasi yang mudah dioperasikan dan mempunyai sejumlah kemampuan lain sehingga pengguna merasa betah dalam mengoperasikan program tersebut
  • Dapat membantu user dalam menyelesaikan suatu persoalan dengan hasil yang sesuai dengan keinginan
  • Menyediakan berbagai kemudahan pada saat user mengoperasikan software/program aplikasi tersebut


Prinsip interface manusia – komputer :

Input & Proses & Output

yang jadi fokus interaksi user-software hanya INPUT dan OUTPUT doank

7
Object-Oriented Interface dalam PHP 5

Salah satu kelebihan PHP 5 adalah interface untuk OOP. Cara koneksi ke database MySQL pun dapat pula dilakukan dengan gaya pemrograman berorientasi obyek. Berikut ini adalah contoh interaksi antara PHP dengan MySQL melalui metode Object-Oriented interface :

$db = new mysqli('192.168.0.192', 'root', '');

$db->select_db('dbtesting');

$sql = "SELECT id, nama FROM tblorangkeren";

$dset = $db->query($sql); /*simpan hasil query ke dataset $dset*/

while ($rs = $dset->fetch_row()) /*retreive recordset ke $rs*/

{

echo "ID: $rs[0] Nama: $rs[1]
";

}

echo "


Jumlah record : " . $dset->num_rows;

$dset->close();

Untuk mengeksekusi stored procedures pada MySQL 5, hanya methods dalam mysqli yang bisa melakukannya. Stored procedure tidak akan dapat di-retreive dengan menggunakan PHP class library mysql klasik. Berikut ini akan dijelaskan mengenai cara memanggil stored procedure dalam berbagai kondisi :

1. Memanggil stored procedure yang tidak mengembalikan record

$sql = "CALL spInsertBuku(@IDBuku, 'PHP5', 'Qvezst', 'Elexmedia')";

$ok = $db->real_query($sql);

2. Memanggil stored procedure yang mengembalikan record (satu perintah SELECT)

$sql = "CALL spGetDataBuku()";

$dset = $db->query($sql); /*simpan hasil query ke dataset $dset*/

3. Memanggil stored procedure yang mengembalikan beberapa record dari beberapa perintah SELECT

$sql = "CALL spGetDataBukuTrusGetDataAnggota()";

$ok = $db->multi_query($sql);

if($ok) {

$i = 1;

do {

echo "Hasil Query : " . $i;

$dset = $db->store_result();

if($dset->num_rows>0 && $dset->field_count>0)

{

while($rs = $dset->fetch_row())

{

echo $rs[0] . " | " . $rs[1] . "
"
;

}

}

$i = $i + 1;

} while ($db->next_result());

}

$dset->close();

4. Membuat stored procedure

Khusus untuk jenis interaksi ini, method yang dapat dipergunakan hanyalah real_query(), dengan pengeksekusian untuk setiap baris SQL secara terpisah. Berikut ini adalah contohnya :

$sql = "DROP PROCEDURE IF EXISTS spBlablabla";

$ok = $db->real_query($sql);

$sql = "DELIMITER |";

$ok = $db->real_query($sql);

$sql = "CREATE PROCEDURE spBlablabla (OUT abc integer)

BEGIN

DECLARE nama VARCHAR(150);

END

| ";

$ok = $db->real_query($sql);

$sql = "DELIMITER ;";

$ok = $db->real_query($sql);

Pernyataan multi_query tidak dapat dipergunakan untuk pengiriman query DDL seperti pembuatan stored procedure ini. Hal ini dikarenakan arsitektur method multi_query sebenarnya melakukan split query string ke dalam array dengan delimiter ; (semicolon) sebagai penanda pemisahnya dan mengirimkan array berisi perintah-perintah SQL tersebut satu per satu ke DBMS. Dalam stored procedure, semicolon dipergunakan sebagai pemisah baris dalam body stored procedure. Jika mempergunakan multi_query, maka stored procedure tersebut tidak akan pernah dieksekusi secara utuh dan akan selalu gagal.

0
Rise of Machine

Postingan ini bukanlah resensi sebuah film, melainkan sebuah kontemplasi mengenai persaingan kualitas yang kini mulai melebar ke arah persaingan antara manusia dengan mesin. Melanjutkan pembahasan pada postingan sebelumnya di bawah, timbul sebuah pemikiran – jika pada zaman dahulu manusia begitu takut terhadap keberadaan mesin industri, mengapa sekarang kita tidak takut lagi ? Dan mengapa sekarang peradaban manusia masih ada ?

Jawaban dari pertanyaan itu tidak lain adalah karena kita selaku manusia juga pasti akan berkembang. Rasa pesimistis hanya dimiliki oleh orang-orang yang kalah. Dan jawaban ini juga setidaknya akan memberikan gambaran mengenai eksistensi manusia dalam menghadapi tahap kecerdasan para mesin. Peranan-peranan manusia seperti yang diilustrasikankan pada Gambar 2 di atas – seperti pemroses informasi, pemroses pengetahuan, dan pengambil keputusan – itu tidak muncul begitu saja sebelum dan pada saat revolusi industri berlangsung berabad-abad yang lalu. Peranan-peranan tersebut diciptakan oleh manusia sendiri untuk mempertahankan peradaban.

Jadi, jangan cemas terhadap perkembangan sistem komputer yang mulai mengancam kedudukan manusia – karena jika komputer sudah mampu mengambil keputusan sendiri tanpa campur tangan manusia, itu berarti satu hal : telah terjadi mekanisasi pengetahuan! Suatu kondisi yang nyaris serupa dengan mekanisasi fisik yang mampu dibuat oleh mesin-mesin industri berabad-abad yang lalu. Dan kita selaku manusia, tentunya juga akan terus berkembang sehingga menemukan peranan-peranan baru buat kita setelah semua peran vital yang ada sekarang di-alih-tugas-kan ke sistem komputer. Bagaimanapun, hingga saat ini, walaupun komputer sudah dapat dikatakan memiliki kecerdasan sendiri – namun komputer masih belum memiliki satu hal penting yang membuat peradaban manusia bisa bertahan sejak zaman pra-sejarah hingga sekarang : naluri, – naluri untuk mempertahankan diri. Itulah yang membuat kita berkembang dari peradaban-ke-peradaban.

0
Tahap Akhir Dari Era Informasi?

Walaupun di mana-mana saat ini sedang digembar-gemborkan semboyan : “Mari Kita Menyongsong Era Informasi” – namun perlu dipahami bahwa saat ini mungkin merupakan tahap akhir dari sebuah era informasi. Dahulu revolusi industri sempat selama beberapa abad membuat buruh manusia tersisih karena terdepak oleh kehadiran mesin-mesin industri. Dan perkembangan sistem komputer pun kini mulai mengancam eksistensi manusia pula. Perhatikan diagram berikut ini :


Gambar 1. Tahap Perkembangan Sistem Komputer

Tahap awal sistem komputer adalah untuk membantu manusia dalam masalah pengolahan data. Dalam tahap ini komputer berperan sebagai mesin pembantu manusia dalam melakukan komputasi. Peran manusia sebagai user dalam menindak-lanjuti proses komputasi yang dilakukan oleh komputer adalah memproses informasi dari data-data hasil kalkulasi tersebut, lalu membangun pengetahuan, dan mengambil keputusan.

Tahap kedua merupakan tahap sistem informasi – mungkin inilah yang dimaksud dengan era informasi itu oleh banyak orang, dimana penggunaan sistem komputer dipergunakan untuk melakukan pemrosesan informasi sehingga peran manusia adalah memproses pengetahuan dan mengambil keputusan.

Tahap ketiga dari perkembangan sistem komputer sudah dimulai ketika tahap komputer sebagai pemroses informasi belum berakhir – tahap ini merupakan pengembangan dari tahap kedua dimana komputer selain memproses informasi juga mampu menjadi sebuah sistem pendukung pengambilan keputusan dari informasi-informasi yang tersedia. Kunci utama dari tahap ini adalah dengan menanamkan komputer suatu kecerdasan untuk dapat memproses pengetahuan dalam sebuah mesin penalaran pengetahuan. Dan tahap inilah di mana artificial intelligence dan sistem pakar muncul dan dikembangkan.

Semakin berkembang sistem komputer maka semakin sedikit peranan manusia dalam sebuah sistem secara utuh. Pada tahap ketiga, peran manusia difokuskan pada peranan pengambil keputusan. Artinya, manusia masih memiliki kedudukan penting walaupun peranannya hanya satu. Lantas muncul pertanyaan, seandainya komputer dapat berkembang hingga mampu mengambil keputusan sendiri – apakah peran manusia benar-benar akan hilang dan tergantikan seluruhnya oleh komputer ? Apakah kondisi itu seperti sequel kedua dari revolusi industri ? Dan apakah akan banyak manusia-manusia yang kalah oleh teknologi seperti kekalahan para buruh pabrik terhadap mekanisasi pada abad pertengahan dahulu ketika muncul revolusi industri ?

Potensi sistem komputer untuk berkembang ke tahap akhir era informasi dan beralih ke tahap selanjutnya sudah mulai terasa. Mungkin ini adalah seleksi alam untuk memfilter mana manusia yang masih menjunjung tinggi komitmen terhadap kualitas dan mana yang tidak – sehingga persaingan kualitas antara manusia dengan mesin tetap dapat dimenangkan oleh manusia selaku pemimpin di muka bumi ini. Dan pertanyaan-pertanyaan tersebut mungkin belum dapat terjawab sebelum kita mengalami fase kebangkitan kecerdasan para mesin.

6
Clear Text Value di Combobox

Huff... udah coding 6 tahun, koq aku baru tau ya klo cara nge-clear text secara proper utk Combobox adalah dengan set listindex = -1...

pernah njumpain nggak, klo kmu nyetting Combo1.style mu = dropdown list? pasti pernah nemuin error klo misal kmu mo nge-clear dgn set combo1.text = "" akan ngebangkitin error "Text Property is Read-Only!" Iya kan? Bahkan buku (CHM) Programming Microsoft Visual Basic 6.0 aja jg bilang gak nganjurin pemakaian Combo.Style = Dropdown List.

Quote:
Drop-down list controls pose special problems in programming. For example, they never raise Change and keyboard-related events. Moreover, you can't reference all the properties that are related to activity in the edit area, such as SelStart, SelLength, and SelText. (You get error 380—"Invalid property value.") The Text property can be read and can also be written to, provided that the value you assign is among the items in the list. (Visual Basic performs a case-insensitive search.) If you try to assign a string that isn't in the list, you get a run-time error (383—"Text property is read-only"), which isn't really appropriate because the Text property can sometimes be assigned).


... makanya banyak yg milih data-combo (bound-control)... tapi pemakaian data-aware control bukan menyelesaikan masalah, tp banyak masalah2 lain yg bermunculan... salah satunya adalah dgn konsistensi data, memory leak, sampe yang kethok motho kya ngga bs di-apply nya XP Manifest ke component slain Windows Common Controls...

sekarang, PROBLEM SOLVED! aku kembali makae combo. Ngga pake2 lg data-combo. ngga pake2 lg Microsoft Forms 2.0 Combo. ngga pake2 lagi Data Combo nya ComponentOne...
untuk nge-reset property text jadi kosong, sebagaimana text1.text = "", aku kini makae combo1.listindex = -1

... alhamdulillah ... Surprised Surprised

NB : konsep ini berlaku untuk *semua* jenis combobox di semua environment Win32, mulai dari VB, Delphi, hingga komponen2 combo yang aneh2... karena pada dasarnya mreka mbikin component combo semuanya inherits dari native combobox.

0
Optimasi ADODB Scripting

menurut kalian mana yang lebih efektif & efisien :

1) menulis ini di sebuah module :

Public con as new ADODB.Connection
Public rs as new ADODB.Recordset

trus bikin di Sub Main


Public Sub Main()
con.connectionstring = "...."
con.open
rs.activeconnection = con
...
dst...
...
End Sub

2) menulis ini di masing-masing form :

Private con as new ADODB.Connection
Private rs as new ADODB.Recordset

trus di form load :

Private Sub Form_Load()
con.connectionstring = "...."
con.open
rs.activeconnection = con
End Sub

n di form unload :

Private Sub Form_Unload()
rs.close
con.close
set rs = Nothing
set con = Nothing
End Sub


3) Nulis ini di masing-masing form :

Private con as new ADODB.Connection

trus object database dibuka di form load

Private Sub Form_Load()
con.connectionstring = "...."
con.open
End Sub

tapi object recordset baru dideklarasikan di procedure ketika dia dibutuhkan, seperti pas misalnya di CmdSave_Click()

Private Sub CmdSave_Click()
dim rs as new ADODB.Recordset
rs.activeconnection = con
rs.cursorlocation = adUseClient
rs.open "SELECT * FROM blabla"

... code n looping ditulis di sini...

rs.close
set rs = nothing
End Sub


menurut temen2 mana yang lebih efektif antara (1) (2) atau (3) ? ato ada yang punya gaya penulisan sendiri? dari sisi kecepatan gimana ?

oia, gaya create-object pas dibutuhin thox seperti di contoh nomor 3 itu aku baru nemuin. aku belum sempat benchmark... menurut kalian efisien nggak ? walau dari sisi typing mungkin agak banyak ngulang2 ngetik code...

ndox wrote :
----------------------------------------------------------------------------------------------
kalo aku mending pake yang nomer 1 aja. jadi kalo ada kesalahan cuma ngedit satu kali, gak usah berkali-kali. ngirit ngetik...
----------------------------------------------------------------------------------------------


TERNYATA...

cara paling efektif utk deklarasikan ADODB.Connection adalah di
public variabel di modules.

alasannya, klo kmu pasang di masing-masing form, ntar pas njalanin satu aplikasi mu dengan banyak form akan menghasilkan banyak connection ID. artinya, server akan menganggap banyak concurrent connection dalam satu waktu. dan apesnya, kadang ada DBMS yang (klo nggak disetting-setting) yang membatasi max_connection dengan angka yang kecil sekali. u know what I mean laah... ^_^ perwalian stiki beberapa semester yang lalu (bukan yg kemaren) sempet bermasalah dengan max-connection...

nggak percaya?
coba bikin aplikasi dengan 3 form, trus di masing2 form nya deklarasikan
Code:
Private db as new adodb.connection
. trus open 3 form tersebut. terserah dgn metode gimana... Dan klo kmu connect nya ke MySQL, coba buka di MySQL Administrator, di situ ada bagian "session" klo nggak salah... - dan lihatlah... padahal kmu hanya running 1 aplikasi, tp di MySQL Administrator tampak ada 3 user yang sedang connect... - BAYANGKAN klo aplikasi mu ini terdiri dari banyak form n banyak user yang menjalankannya. number of concurrent connection = 100 bisa jadi TEMBUS dalam waktu sekejap.

Gimana dengan ADODB.recordset?

cara paling safety utk mempergunakan object ADODB.recordset itu, TERNYATA kmu deklarasikan bukan di module (as public), ato di local form... tapi kmu construct di dalam masing2 procedure (sub/function).

alasannya?

variabel recordset itu merupakan variabel array of record untuk nampung output dari query select. Dia bisa menampung no result set, 1 record, 2, ato jutaan...

nah, klo misalnya kmu taroh di global, bayangkan, kapan variabel tampung itu akan di dispose dari memory? tentu ketika aplikasi kmu terminate... nah pas aplikasi sedang jalan n kmu nge-load recordset (query select) berkali2? tu alokasi memory masih nyangkut tuh sblum kmu exit dari aplikasimu.

ga percaya?

coba kmu bikin satu form, kasih grid (terserah), trus bikin query select yang kira2 menghasilkan output 1000 record. codenya kira2 gini deh :
Code:

'--- di module diasumsikan dah ada Public db as new adodb.connection
'--- n diasumsikan object db udah di open successfully
'--- nah skrg di salah satu form nih codenya :

Dim rs as new adodb.recordset, sSQL as string, i as integer

private sub command1_click()

listview1.listitems.clear
sSQL = "SELECT * FROM Customers"
if rs.state <> adStateClosed then rs.close
rs.open sSQL, db
if rs.recordcount > 0 then
for i = 1 to rs.recordcount
call IsiListView(listview1, rs(0),rs(1),rs(2),rs(3),rs(4))
rs.movenext
next i
end if
rs.close
end sub



yaa kira2 gtu lah Smile

klo kmu ngga punya database yang berukuran medium tsb, kmu bs pinjam database northwind bawaan nya access, sql server, ato bawaannya vb. search aja pake F3.. Very Happy

nah trus, sebelum kmu jalankan aplikasi mu itu..., sekalian jalanin juga Task Manager (ctrl+alt+del) n masuk ke tab processes. (tu window slalu always on top kan?). persiapan selesai, trus cb kmu jalanin aplikasi mu itu... tekan tombol Command1. trus liat di Task Manager. Memory Usage utk aplikasi mu nambah kan. trus coba kmu tekan lagi Command1 nya. berkali-kali kalo perlu... apa hasilnya ? mem usage bakal nambah terus n nambah terus....

baguskah itu? tentu tidak...

Oke-oke..., klo gtu, menurut Anda, mana cara yang ideal deh?

1. spt postingan ku di atas, gunakan Public declaration utk masang object ADODB.Connection... - taroh lah di salah satu module...

Code:
Public db as new ADODB.Connection


kmu langsung construct dgn ngasih keyword new jg nggak apapa...

2. lakukan peng-open-an connection cukup sekali pada Sub Main atau form load di form utama mu... (tentu stlh ngeset connectionstring yang bener n beberapa atribut macam cursorlocation, locktype, dll)...

Code:

Sub Main()
db.ConnectionString = "Provider=SQLOLEDB.1; blablabla"
db.CursorLocation = adUseClient
db.open
end sub


3. JANGAN LUPA close connection pada form utama di events unload. klo nggak, DBMS kadang juga nganggap koneksi masih aktif walo aplikasi mu udah ditutup (sebelum DBMS nge-ping smua client-nya apa masih bener2 aktif ato dalam kondisi idle)


Code:

Sub Form_Unload()
if db.state <> adStateClosed then db.close
set db = nothing
end sub


code set db = nothing ini adalah cara VB utk destroy object (destructor). tanpa ini, variabel db mu hanya dalam kondisi pause. ngga di free beneran...

4. Utk ngirim query yg ngga mbalikin resultset (INSERT/UPDATE/DELETE), pake object connection. Jangan pake recordset.

Code:

db.execute("INSERT INTO blablabla.....


5. utk ngirim query yang mbalikin resultset (SELECT), JUGA PAKAILAH OBJECT CONNECTION...

lho?
nggak salah tha iki ? Shocked

bener, bro!

utk ngirim query SELECT, alangkah baiknya klo kmu pake db.execute juga... utk nampungnya baru silakan pake recordset...

contoh codenya gini, biar jelas

Code:

Private sub Command1_click()
dim i as integer
dim rs as ADODB.recordset '--> perhatikan, ngga ada 'NEW' d sini
sSQL = "SELECT * FROM Customers"
set rs = db.execute(sSQL) '--> rs baru di-construct d sini..
if rs.recordcount > 0 then
for i = 1 to rs.recordcount
'retreive lah nilai rs ke variabel/grid/etc d sini....
rs.movenext
next i
end if
rs.close '--> tutup object recordset stlh smua nilainya dah
' dikasihkan ke variabel/grid/etc. di state ini, kita dah
' nggak butuh object recordset lagi...
set rs = nothing '--> stelah ditutup, buang lah jauh2 dari memory...
end sub


bgitu...
nilai efisiensinya di mana tuh?

object recordset itu dependen banget ama object connection. klo kmu pernah pake gaya rs.open, tentu kmu ga asing dengan syntax model gini :

rs.open sSQL, db

rs.close

ya kan?
apa sih parameter kedua dari rs.open setelah query? active connection...
artinya apa?

walaupun kmu pake rs.open, kmu tetep memanggil ulang properti n state dari object connection mu (db)... dengan syntax kmu spt itu, artinya kmu MENDATANGKAN dua object bersamaan. inisialisasi rs, dan memanggil kembali db... wuih,.. rame banget...

dengan model set rs = db.execute(sSQL), kronologinya bgini :
kmu kirimkan sql query SELECT mu via db.execute. stlh diproses sama DBMS, dia bakal mbalikin hasil query ke object db. yup. pada state ini, object db UDAH BERISI record-record hasil query SELECT mu itu tadi... tapi permasalahannya, record2 tsb belum di-parsing. blum di-array-kan. jadinya ngga bisa dipake utk di assign ke variabel... nah, utk memanfaatkan kumpulan data tsb, maka hasil .execute itu tadi di-assign ke object recordset... dan perintah SET rs = db.execute secara otomatis akan meng-construct object rs itu sendiri dengan resultset.. klo kmu dulu pernah belajar delphi d kampus (aku nggak) kmu mungkin pernah kebingungan pas manfaatin komponen ADOConnection1 yang musti kmu link-link kan dengan dataset segala... nah itu prinsipnya sama... ya kya gtu tadi kronologinya...

TRUS, setelah ini mau apa?

terus terang, saat ini *pas aku rombak* gaya pemrograman ADO ku dengan model teroptimasi kya gtuan, aplikasi gontortoise ku (ni proyek TA ku yang blon kelar2 dari dulu sampe skrg) jadi semakin lightweight. memory usage kecil di sisi client, beban server makin kecil, dan yang paling penting : aplikasiku yang terdiri dari 110 forms n 88 tabel jadi Wuzz Wuzz... (ngikut istilahnya JAY) walaupun aku developnya pake VB yang terkenal LEMOT executables-nya... (bilang pak Setiawan)

dna_psr_09 wrote :
----------------------------------------------------------------------------------------------
Klo aku mendink setiap kali db dibuka dan sudah selesai dipergunakan mending lagsung si tutup.... itung2 biar g buang2 memori.... kasian kalo kita develop di kompi yang lebih rendah spesifikasinya ....
trus jika digunakan untuk client server tidak terlalu memakan trafic yang terlalu banyak ...

so .....


bila

cn.open
...
...
...

Akhirannya ya
cn.close
Very Happy Cool
memang dalam pengetikan coding lebih panjang dan ribet .....
tapi jika kita memikirkan apa dampaknya jika telah di implementasikan di End User gimana Hayoooo .....

Kacian Kan ... Mad Mad


makasih ......

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

dulu aku pernah jg model gtuan. object connection ku-declare-ku-open-n-ku-close di level routines (sub/function). tp akhirnya aku meninggalkan tu model krn NGGA BS KUPAKE utk apply transaction.. krn jika (misalnya) di command1_click aku bikin transaksi (cn.begintrans) n kuproses DML (insert update delete) trus ku tutup transaksi (if err then cn.rollbacktrans else cn.committrans), APA FUNGSINYA TU section transaction ? blass nggak ada Very Happy

yang kubicarakan di atas itu sbnrnya adalah optimasi penggunaan object recordset. krn klo kmu conn.open n rs.open thox ngga melakukan S.I.U.D., memory yang kepake "hampir" nggak ada n ngga pernah besar. kapan sih memory yang dipake AKAN menjadi besar? sebenarnya cuman pada 1 state : ketika kmu melakukan "SELECT". cuman itu... apalagi select yang mengembalikan 1juta record (hal yang pemborosan n percum tak bergun). di mana array of record itu ditampung nilainya klo nggak di sisi client? menggunakan adUseServer, jg bukan memecahkan masalah, krn traffic jadi padat. utk retreive satu baris record harus "minta" dulu ke server, trus diulangi utk baris-baris selanjutnya sampai 1 juta kali... Very Happy

operasi Insert Update Delete, yang nanganin kan server. yang mikir jg server. client cuman ngirim satu untaian SQL dan dia cuman nerima 1 nilai dari hasil pengiriman Insert/Update/Delete tsb : "SQLSTATE", dimana klo 0 dia artinya sukses di-insert/update/delete dan klo bukan 0 dia artinya error. misal :
020000 : terjadi duplicate key.
023000 : delete gagal karena ada data udah dipake di child tables.
042000 : kurang tanda petik satu (') tuh di query mu...

nah, berapa besar variabel yang ditampung rs ketika insert/update/delete ?
kecil banget.... 6byte! di sisi client, tuntutan resource yang besar itu HANYA ketika select. (ini termasuk execute stored procedures yang berisi hasil SELECT lho...)

jadi, pendeklarasian object connection di level routines, local form, global modules, hasilnya ngga akan terlalu kentara di sisi client. klo di level routines, efek di server 'hanya' ConnectionID nya cepet sekali meningkat. tp concurrent connectionnya tetep dianggap 0. sama server akan dianggap ngga ada satu pun client yang connect. lha gimana, wong baru akan nerima koneksi klo tombol di klik, n klo udah selesei mroses, koneksi akan diputus....
klo di level local form, baik connection ID maupun concurrent connectionnya akan meningkat, tergantung jumlah form yang kmu load... di mata server, koneksi yang dijalin dgn gaya beginian, akan tampak banyak user yang connect walo cuman 1 kenyataanya...
sedangkan klo di level modules, statistik connection akan lebih nyata... ada 1 user yang connect, ya ke-detect 1 di server...

berbeda jauh dengan pola pendeklarasian object recordset... di mana performa client akan sangat mempengaruhi performa aplikasi... yaa spt yang ku ulas di atas tuh...


CMIIWW,

Rizky Prihanto
http://www.linkar.co.id
http://www.software-arsitek.web.id