Kalau yang dimaksud adalah :
- ID itu bukan dari Field Autoincrement
- Namun sbg penanda yg unik
- Bisa terus berurutan walopun ada record yg didelete dimanapun letaknya, yg
berarti kalo ada pendeletan dan di INSERT lagi maka mengisi lagi ID
pada record yg didelete tersebut. Sehingga tidak ada ID yang gowang (melompat)
Kebetulan sekali saya telah juga mengalami hal semacam itu. Jengah dengan Field
Autoincrement yang memiliki sifat yang terus increment tanpa mempedulikan ada
ID
yang didelete , sehingga hanya dipakai sbg penanda yg kurang begitu rapi.
Hal itu saya utak atik sendiri , disisi program dengan membuat Procedure dan
membuat 1 table bantu untuk menampung nomor. Tapi bukan untuk menyimpan nomor
terakhir
melainkan table itu ter-INSERT kalau ada delete Record pada ID yang di maksud
tadi.
Lho kok ?
Bgini , kebetulan saya kerja di lingkungan DELPHI (isoku yo iki), tapi aku yakin
dengan bahasa apapun mungkin bisa Anda terapkan. Yang penting modelnya bisa
menjadi
membantu referensi Anda.
Pertama, pada event OnBeforePOST Saya letakkan procedure buatan sendiri
if qmst.State=dsInsert then
DelDtlNomor(Kunci.AsString,Inisial); // ini procedure nya
inti Procedure DelDtlNomor isinya :
SQL(' DELETE FROM t_nomor where rtrim(fc_nomor)='+quotedstr(nomor)+'
and rtrim(fc_dari)='+quotedstr(dari) );
Kenapa kok sesaat sebelum save pada table master apa pun itu kita lakukan
delete ? saya berpikir mundur ke belakang, sebab
saat Event OnNEWRECORD pada table tersebut kita letakkan
qmstKode.AsString:=Bacanomor(Inisial,tablename,size);
Procedure BacaNomor intinya membaca jumlah record pada table yang dimaksud
SQL(' Select top 1 fc_nomor from td_nomor with(nolock) where
rtrim(fc_dari)='+quotedstr(dari) +' order by fc_nomor');
. Tentu saja saya selalu memakai proses di BackEnd
dengan SQL Command , jangan memakai sisi FrontEnd. Hal ini utk menjaga kalau
dibuat program multiuser/rame-rame melakukan Penyimpanan
secara bersamaan. Kalaupun ada hal spt itu bisa di cegat (dihadang) pada saat
OnBeforePost dan OnAfterpost kita adakan pengecekan apakah ID tersebut
sudah dipakai belum ? (hanya menggunakan select ID saja pada table bersangkutan)
yg kedua, pada saat penghapusan reord / Delete record.
Logikanya, ID nomor yg kita inginkan adalah berurutan kan ? maka kalau ada
penghapusan data maka ID itu juga kehapus ?
Kita ijinkan saja dihapus dengan persayaratan ID tersebut kalau dijadikan key,
maka kita cek korelasi ID tersbut dipakai oleh table lain ga ?
(hal ini juga sudah saya pikirkan namun kita bahas kali ini bukan korelasi
table kan ? Mgkin pada saat nanti kalau ada yg tanya saja)
Kalau ID tersebut kita DEL dan belum ada korelasi ke table lain, maka kita
hapus saja. Namun, ID tersebut di "CATAT" ke dalam table penampung
misalkan table t_Nomor , intinya INSERT INTO t_nomor
(fc_nomor,fc_dari,fd_tgl,fc_userid) VALUES(:id1,:id2,:id3,:id4) ;
Hal ini akan dibaca dan diambil nomornya saat onNewRecord pada Procedure
BacaNomor.Sehingga apabila record dimanapun di hapus,maka pada saat append
record lagi , nomor ID yg diambil adalah urutan yg di hapus tadi. Sehingga
memungkinkan untuk mengisi lubang didalam table
(wah kayak lagune Letto Lubang didalam Hati wae...)
bila ada ID spt ini : 1 , 2, 3,4,5 kemudian saya hapus nomor 4 : 1,2,3,5 (yg ID
4 ketika didelete akan tersimpan di table t_nomor), kemudian akan dipakai lagi
saat Append.
Kurang lebih bgitu,
Matur nuwun...
-Hendrik-
http://hendrikc.blogspot.com
Lebih Bersih, Lebih Baik, Lebih Cepat - Rasakan Yahoo! Mail baru yang
Lebih Cepat hari ini! http://id.mail.yahoo.com
[Non-text portions of this message have been removed]