Erdal,
Iyi bir sistemin, baglantisiz bile bu isi yapabilmesi lazim (baglanti bazi noktalarda sart ama bazi noktalarda ise baglanti kesilebilir, kisi yemege cikabilir vs).
Bufferlar kisilerin dusunceleri gibi, yan yana dursan bile o aciklamazsa degil sen vucudunun diger bir kisminin bile ogrenemyecegi kadar ayri alanlar. Demek istedigim:
use customer in 0 alias c1
use customer in 0 again alias c2
cursorsetprop('Buffering',5,'c1')
dedikten sonra c1'deki her degisiklige (tableupdate() edilmedigi surece) sadece c1 uzerinden ulasilir. c2 ayni tablo, ayni ortamda ama onun degisiklikten haberdar olma sansi yok.
C001 eger bufferda ise onun kaydedilme sansinin oldugunu hic kimse bilemez (kendisi disinda).
Isin kotu tarafi, bu sorunun bilinen bir cozumu de yok (VFP ya da baska bir dil). IDs benzeri bir ara tablo ile 'rezervasyon' yaptirabilirsin. Rezervasyonlar gerceklesmek zorunda degil. Gerceklestiginde cakismaz, gerceklesmezse C001'i kaybetmis olursun (bir sonraki kullanabilir, sira bozularak).
Ramazan'in verdigi kod benim kullandigimin neredeyse birebir aynisi. Orada primary key kontrolu yapiyor, o yaniltici olabilir. Bu sadece primary key icin degil. Benzeri amacli her deger icin kodu biraz degistirerek kullanabilirsin. Orada C001 ilk kullanici tarafindan bloke gorunur, ikinci uyariyi alir. Eger deger dogrudan kullanici tarafindan elle 'C001' diye yaziliyorsa, bir rezervasyon tablosu yaratip oraya yazarsin (candidate ya da primary indexli), o tabloda buffer hic kullanilmadan (istersen ek bir alana kullanici adi). Diger kullanicilar C001 kaydetmeye kalktiginda ayni islemi yapmalari gerekir, kaydedemez ve uyariyi alir. O tablo uzerinde indexseek(), seek() vs gayet guzel calissa da asil guvenilecek, C001'in kaydedilip edilememesi (indexseek ile insert arasindaki nanosaniyelerde baskasi insert edebilir eger tablo kilitlenmiyorsa).
Bir autoincli tabloda benzer amacli kullanilabilir (ama ben autoinc'e asla guvenmedigimden kullanmiyorum).