Wednesday, October 9, 2013

Jenis - Jenis Type Cursor Pemrograman VB

Cursor merupakan satu paket record data yang di representasikan dari sebuah query/perintah. Cursor bisa berisi data yang nyata atau hanya data referensi saja sebagai penunjukan sebuah record didalam sebuah database, Tapi dalam mekanismenya tidak senyata yang seperti yang kita bayangkan, karena data yang diterima itu sifatnya transparan bagi programmer. Analaoginya seperti ini anda melakukan eksekusi sql "SELECT * FROM tblData" trus database memprosesnya dan dikembalikan, ini loh data yang anda minta dan data itu berupa cursor(dimana posisi record saat ini, berapa datanya, dan lain sebagainya). tapi ini sebenarnya tidak nyata karena data tersebut tidak bisa langsung diolah tapi membutuhkan object lain untuk mengolahnya. Selain itu ada juga eksekusi non cursors dimana transaksi yang kita lakukan ke database tidak memiliki pengembalian data berupa cursor, seperti (INSERT, UPDATE, DELETE) yang dikembalikan hanya berapa jumlah data yang berhasil di eksekusi (record affected).


Cursor memiliki 3 bagian penting, yaitu
1. Dimana lokasi cursor tersebut berada, (di server atau di client)
2. Type dari cursor itu sendiri (0-adOpenForwardOnly, 1-adOpenKeyset,
2-adOpenDynamic, 3-adOpenStatic)
3. Pilihan penguncian data (1-adLockReadOnly, 2-adLockPessimistic,
3-adLockOptimistic, and 4-adLockBatchOptimistic)


Lokasi Cursor

Property Lokasi Cursors atau CursorLocation merupakan property dimanakita ingin menentukan posisi cursor yang ingin kita buat, apakah diserver atau di client (2-adUseServer atau 3-adUseClient). Nilai dari property ini merupakan bagian yang tak terpisahkan dari object koneksi anda (ADODB.Connection). Property ini hanya dapat dirubah ketika recordset anda dalam keadaan tertutup. Jika anda menggunakan provider OLE DB, driver ODBC atau SQL Server nilai default dari property ini adalah forward only (0-adOpenForwardOnly) yang berada pada server(2-adUseServer). property ini sangatlah tepat untuk digunakan jika anda beranggapan bahwa performa dan scalabilitas dari Aplikasi serta konsistenitas dari database merupakan suatu hal yang penting bagi anda. Namun jika anda menggunakan object Datagrid, Listview atau object lain yang sejenis untuk fetching data sebaiknya anda menggunakan lokasi cursor di client, hal ini dapat mengurangi traffic jaringan anda ketika anda melakukan bouncing dan fetching kedalam Datagrid atau listview() tapi anda juga memerlukan mesin yang mumpuni dan sumberdaya memory yang memadai untuk melakukan metode ini.
Type Cursor

Property Type cursor (CursorType) menginformasikan ke database type cursor apa yang harus dibuat oleh system. Type dari cursor ada 4, yaitu: 0-adOpenForwardOnly, 1-adOpenKeyset, 2-adOpenDynamic, atau
3-adOpenStatic. Jika anda menggunakan lokasi Cursor di server 2-adUseServer semua type ini bisa digunakan namun jika anda memilih lokasi cursor di client maka hanya type 3-adOpenStatic yang dapat
digunakan.

0-adOpenForwardOnly
type 0-adOpenForwardOnly merupakan nilai default jika anda memilih lokasi cursor di server. Type ini akan menjadi lebih efektif dan efisien jika anda mengkombinasikannya dengan nilai adReadOnly pada penguncian data dan CacheSize = 1, Biasanya para programmer yang menggunakan metode ini menggunakan metode Non Cursor untuk Update data. Seperti yang dikatakan William R. Vaughn dalam bukunya yang berjudul The Hitchhiker's Guide to Visual Basic and SQL Server yang mendefinikan metode ini sebagai "Fire-hose" (wah kaya group music aja) dimana kita bisa melakukan eksekusi data yang besar hanya kedipan mata (dalam kondisi tertentu). Tapi Karena type ini Forward-Only jadi anda hanya hanya bisa melakukan MoveNext untuk pindah posisi record lainnya tidak. Nah ini bagian yang paling tidak disukai oleh programmer karena kita tidak bisa melakukan banyak manupulasi dan pengolahan data dengan menggunakan metode ini.

2-adOpenDynamic
Cara kerja dari cursor yang bertipe Dinamis adalah dengan membuat bookmark pada datasource. sehingga kita akan mendapatkan data yang real-time kapanpun kita ingin meminta data. karena cursor akan selalu memantau aktivitas dari perubahan data dan akan menginformasikan kepada kita jika data tersebut telah dirubah oleh user lain. Jadi ngga heran kalau metode ini menjadi yang paling populer di kalangan progammer karena cukup mudah dan real-time kapanpun saya minta sudah disediakan. Tapi anda jangan senang dulu karena saya menyebut metode ini sebagai metode yang mahal (sory klo ada yang tersinggung). Kenapa saya bilang mahal. Hal ini disebabkan karena cursor akan selalu memantau altivitas dan menginformasikannya kembali maka dibutuhkan mesin yang mumpuni dan jaringan yang bagus karena metode ini juga banyak memakan sumber daya memory untuk mengaplikasikannya. Metode ini akan berpengaruh pada performa dari aplikasi anda. klo datanya sedikit sih ngga masalah tapi klo datanya dah ribuan, siap-siap dah tuh mesin jadi lemot klo mesin anda tidak mumpuni.

Catatan:
Microsoft Jet Engine tidak mendukung type cursor 2-adOpenDynamic, jadi klo anda merubah property ini maka akan secara otomatis dipindah ke type keyset 1-adOpenKeyset.


1-adOpenKeyset
Cara kerja cursor dengan metode ini pada intinya sama dengan metode Dimanis namun diperlukan perhatian khusus karena metode ini tidak akan menginformasikan data yang telah ditambahkan oleh user lain. anda dapat melakukan perubahan data pada posisi namun akan menjadi error jika posisi cursor yang saat ini sedang diakses telah dihapus oleh user lain. Type ini hanya bisa digunakan pada lokasi cursor di server.

3-adOpenStatic
Type Cursor ini sangat fleksibel karena pada dasarnya ini adalah sebuah copyan record dari datasource yang ada di server dan merupakan default value dari tipe data cursor yang menggunakan client sebagai lokasi cursornya. Tapi karena type ini statis jadi jangan harap anda mendapatkan informasi perubahan data yang telah dilakukan oleh user lain. Karena metodenya seperti copy jadi trafic jaringan akan terasa berat pada saat meminta data namun cukup efisien jika anda menggunakan object data viewer seperti Datagrid, Flexgrid, Listview dan lain sebagainya karena kita ngga perlu request data lagi dari server khan sudah ada di lokal. Selain itu metode ini juga bisa untuk melakukan transaksi ke server biasanya menggunakan 4-adLockBatchOptimistic untuk tipe penguncian datanya.

Sebelum saya menjawab pertanyaan anda izinkan saya untuk menjelaskan sesuatu dulu.

Semua database multiuser menggunakan beberapa type penguncian data, Kunci ini diperlukan untuk mencegah user lain melakukan perubahan data pada record yang sama dan pada saat yang bersamaan pula, apabila hal itu terjadi maka database akan menjadi tidak konsisten.

1-adLockReadOnly
Secara default recordset itu memiliki type penguncian 1-adLockReadOnly (hanya dapat dibaca) sehingga kita tidak dapat melakukan Update (penambahan, perubahan atau penghapusan data). Ini merupakan cara yang efisien karena kita tidak memaksakan data untuk di update. selain itu type ini juga merupakan pilihan terbaik jika anda beranggapan scalabilitas aplikasi dan konsistenitas database itu suatu hal yang penting. Dan akan menjadi strategi yang bagus dan cepat jika anda juga menambahkan forward-only ketika sedang membaca data. Lalu untuk Update data (penambahan, Perubahan, penghapusan) gunakan sql statement atau
stored procedures.

2-adLockPessimistic
Ketika anda menggunakan type penguncian 2-adLockPessimistic ADO akan mencoba untuk mengunci field pada saat melakukan mode perubahan (Edit Mode) dan akan melepasnya kembali ketika anda selesai melakukan update (rs.update) atau pada saat anda merubah posisi record (rs.move). Pada saat record tersebut dikunci user lain tidak diberikan hak untuk update data hal ini dapat mengurangi masalah pada scalabilitas aplikasi anda. Tapi tidak direkomendasikan jika menggunakan type penguncian dengan menggunakan object navigasi bebas (ADODC) pada interface anda atau anda menyuruh user lain untuk break jangan melakukan Update data dulu disuruh beli kacang kek atau apa aja terserah asal jangan buka form yang yang ingin anda update. Type ini hanya tersedia pada server-side cursors.

3-adLockOptimistic
Penguncian optimistic lebih baik dari pesimistic dalam hal scalabilitas aplikasi. pada type ini ADO hanya mengunci data pada record saat ini sehingga dapat mengirangi waktu proses. type ini sering digunakan para programmer yang menggunakan recordset untuk mengupdate data.

Sumber

No comments:

Post a Comment