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 dimana
kita ingin menentukan posisi cursor yang ingin kita buat, apakah di
server 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.

sekarang muncul pertanyaan. Trus metode yang bagus yang mana?

Wah klo gitu sulit deh jawabnya. Gini aja ada 1 orang pake kaos celana
pendek traning dan sepatu kat, trus ada 1 orang lagi pake Kemeja mahal
dibungkus dengan Jas Mewah dan celana hitam panjang dan sepatu kulit.
Klo dilihat yang bagus yang mana ?,klo mau nyimpen barang gampangan
mana dan gedean mana ? trus klo disuruh lari cepetan yang mana ?

silahkan anda jawab sendiri pertanyaannya.

Ok cukup sekian penjelasan saya semoga bisa menjadi pencerahan buat
semuanya. Viva Programmer Indonesia
Sory klo tulisan saya ada yang menyinggung anda, saya sama sekali
tidak bermaksud untuk menyinggung, ini hanyalah sebuah konsep
pemikiran saja.
Buat Cacian, Makian dan protesnya saya tunggu disini atau lewat e-mail
juga boleh
Terima kasih


salam,

^Aiska HendrA^

--- In indoprog-vb@yahoogroups.com, "David Gunawan Sugianto"
<[EMAIL PROTECTED]> wrote:
>
> Pada cursortype, tipe ini apa fungsi dan artinya :
> 1.    adOpenStatic 
> 2.    adOpenKeyset
> 3.    adOpenForwardOnly
> 4.    adOpenDynamic
>  
> Pada locktype, tipe ini apa fungsi dan artinya :
> 1.    adLockBatchOptimistic
> 2.    adLockOptimistic 
> 3.    adLockPessimistic 
> 4.    adLockReadOnly
>  
> Thx before..
> 
> 
> [Non-text portions of this message have been removed]
>


Kirim email ke