Replace all daha hizli cunku SQL Update gibi record locking kullanmiyor. Tablo exclusive kullanimda ise SQL update'de hizli.
Ancak kilitleme farklari nedeniyle hizdan once dusunmen gereken o anda kilitlenmis kayitlar. Kisaca soylemek gerekirse:
eger replace'i for,while, all, next N gibi ekleriyle kullanirsan tablo header kilitlemesi gerekiyor ve baska kullanicilardan birisi tek bir kaydi bile o sirada kilitlemisse (senin degistireceklerinle ilgisi olmasa bile) replace hata ile kesilir.
Update (SQL) ise isini yapar. Onda da ozel durum, eger baskasinin kilitledigi kayit senin yapacagin degisikliklere uyan kayitlardan birisi ise, oraya kadar olan kayitlarda degisiklikler yapilir, orada kesilir. Ancak where nedeniyle o kilitli kayitlara dokumuyorsa isini tamamlar (replace tamamlayamaz o kayit degistirmesi gerekenlerden olmasa bile).
Buffering kullaniyorsan o zaman hem replace hem SQL update'de isi tamamlama sansin cok yukselir. Cunku isin basarilamama sansini, sadece tableupdate() anina sinirlamis olursun. Ayni anda birden fazla kullanicinin kayit ya da tablo kilitleme sansi cok daha dusuk ve hata almak yerine tableupdate() sonucuna bakarak ilerleme sansin var (aerror ile neden basarilamadi vs).
Simdi Tarkan'dan ozur dileyerek, biraz verilen kodlar uzerinde konusmak istiyorum:
Visual Fox Pro
Replace cAciklama With "Kullanıcılar" For nTip = 1
Replace cAciklama With "Site" For nTip = 2
Replace cAciklama With "Program" For nTip = 3
Yerine:
Visual Fox Pro
Replace cAciklama With ;
Icase(nTip=1,"Kullanıcılar",nTip = 2,"Site",nTip = 3,"Program") ;
for inlist(nTip,1,2,3)
Tercih et. Cunku tablo header kilitleme zamanini dusurmus olursun. Bu SQL update olsa idi nTip'in 1,2,3 disinda olan kayitlarin baska yerde kilitlenmis olmasindan etkilenmeyecekti.
Update SQL'in davranisi kabaca:
Visual Fox Pro
scan for ...
if rlock()
replace ...
else
exit
endif
endscan
gibi.
IsRLocked() sadece senin kaydi kilitleyip kilitlemedigini soyler. Baskasinin degil. O nedenle baskasinin kilitleyip kilitlemdigini ogrenmek biraz zor. Rlock() ile kilitlemeye kalkarsin ve .F. donerse baskasi kilitlemistir.
Foxpro'da bayagi sihir var galiba bu isin bu kadar karmasik olabilecegini yillardir farketmemisim:)