Moderom,
Ozur dilerim ama dinlemniyorsun. Hep olayi karmasiklastiriyorsun. A deniyor sen onu Z diye yapmaya calisyorsun. Sana verilen cevaplari biraz dikkatli oku. Her seferinde ayni hatalari tekrarladigini gormek insani uzuyor. Kodu yazmadan once ne yapacagini iyi planla, yazdigini da ne yapiyor diye analiz et. Normalde 1sn surmeyecek islem sanirim sende hic bitmiyor. Kodun uzun ve karisik olunca bakasi gelmiyor insanin ama ilk koduna soyle bir baktim ve gordugum:
Visual Fox Pro
for say=1 to 1700
islemyapildi=.f.
select tablo
scan
update tablo;
set alan1=xxxx,;
set alan2=yyyy; *denemdim bu kısımda hata verdi update ten where in sonuna kadar olan kısmına hata gösterdi
where tablo.alan3==xyz and tablo.alan4=cccc
islemyapildi=.t.
endscan
if islemyapildi=.f.
insert into tablo(alan1,alan2,alan3,alan4,alan5,alan6) values (1,2,3,4,5,6)
endif
next
-Bir dongu yapmissin icindeki kodu 1700 kere calistiriyor (1700 gibi sabit bir deger kullanirsan bunun adi "sihirli sayi" olur. Neden 1700 onun yerine bir #DEFINE sabiti ya da degisken kullansan daha mantikli). Her neyse asil sorun 2 ya da 1700, ayni kod tekrar tekrar calisiyor. Kodun bir calismasindan digerine hicbir farki yok. Tamamen ayni sey tekrar tekrar yapiliyor. Sadece genel isi 1700 kez yavaslatmaya yarar. Bu gereksizlik ortadan kalkinca kodun yeni hali:
Visual Fox Pro
islemyapildi=.f.
select tablo
scan
update tablo;
set alan1=xxxx,;
set alan2=yyyy; *denemdim bu kısımda hata verdi update ten where in sonuna kadar olan kısmına hata gösterdi
where tablo.alan3==xyz and tablo.alan4=cccc
islemyapildi=.t.
endscan
if islemyapildi=.f.
insert into tablo(alan1,alan2,alan3,alan4,alan5,alan6) values (1,2,3,4,5,6)
endif
-Dongunun icerisinde gereksiz bir "IslemYapildi" degiskeni ve sonrasinda onun IF ile kontrolu var. Neden gereksiz? .F. ile baslatiyorsun, guzel. Kod mutlaka Scan...endscan arasina giriyor ve degeri mutlaka .T. oluyor ( "endscan" oncesinde - islemyapildi=.t. - ). Daima .T. olduguna gore:
If IslemYapildi = .F. sonucu da daima .F. yani o blok da tamamen gereksiz oluyor. Bunu da duzeltince kod:
Visual Fox Pro
select tablo
scan
update tablo;
set alan1=xxxx,;
set alan2=yyyy; *denemdim bu kısımda hata verdi update ten where in sonuna kadar olan kısmına hata gösterdi
where tablo.alan3==xyz and tablo.alan4=cccc
endscan
haline geldi.
-Bakalim sonra ne yapiyorsun. "Tablo"'yu seciyorsun ve scan ... endscan dongusune giriyor. Scan ... endScan calistigi tablonun kayitlarini kosulsuz bastan sona tarar. Yani:
Visual Fox Pro
select Customer
scan
? Customer.Company
endscan
Dersen Customer tablosundaki her kayit icin Company degeri ekrana yazilir.
Update de tum tabloda Where ile filtreleyerek calisir. Uzun lafin kisasi sen ayni Update'i tablodaki kayit sayisi kadar tekrar tekrar yapmaya kalkismissin (sansina ilk Update sonrasi en son kayda geldiginden tek bir kez calisarak cikiyor), Onu da duzeltince geriye kalan tek bir update komutu:
Visual Fox Pro
update tablo;
set alan1=xxxx,;
set alan2=yyyy; *denemdim bu kısımda hata verdi update ten where in sonuna kadar olan kısmına hata gösterdi
where tablo.alan3==xyz and tablo.alan4=cccc
Burada da syntaxi daha once soyledigim gibi duzeltirsen calisan birsey elde edersin. xyz ve ccc nedir anlamadim. xyz ve ccc diye karakter degerler oldugunu varsayarak:
Visual Fox Pro
update tablo;
set alan1="xxxx", ;
alan2="yyyy" ;
where tablo.alan3=="xyz" and tablo.alan4="cccc"