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.

Loh, Trus klo mo Update data gimana ????

Tunggu dulu Type penguncian record itu ada 4 cara
1-adLockReadOnly
2-adLockPessimistic
3-adLockOptimistic
4-adLockBatchOptimistic.

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.

Nah disinilah masalahnya...
karena recordset mode defaultnya 1-adLockReadOnly jadi anda tidak
memiliki akses untuk mengupdate data (.addnew, .delete, .update) itu
bisa dilihat dari pesan error

current recordset does not supporting updating. This may be a limitation
of the provider, or of the selected locktype

dalam bahasa indonesia kurang lebih artinya seperti ini:

Recordset yang anda gunakan saat ini tidak mendukung proses update.
ini bisa dikarenakan keterbatasan provider anda (tidak membolehkan
anda untuk update) atau anda memilih type penguncian recordset yang salah

dan error tersebut muncul ketika anda mencoba untuk menambahkan data
baru(lihat penjelasan diatas).

catatan:
Type ini hanya dapat diset sebelum atau pada saat anda membuka recodset
kalau tidak maka akan muncul error seperti ini:

    Operation is not allowed when the object is open

perhatikan kode ini

    With rs_merchantdebit
        .ActiveConnection = cn 'ConnectionString
        .CursorLocation = adUseClient
        .LockType = adLockReadOnly 'adLockOptimistic
        .CursorType = adOpenForwardOnly ' adOpenKeyset
        .Source = sql_query
        .Open
    End With

atau bisa juga seperti ini:

    call rs_merchantdebit.Open(sql_query, cn, adOpenKeyset,
adLockOptimistic)


Ok semoga bisa membantu anda dan mendapatkan pencerahan
Sorry klo bahasanya kurang dipahami maklum masih IdiOot :)
Terima kasih

^Aiska Hendra^

Kirim email ke