Konu: Scatter ve Scan ?
programda kullanılan Scatter ve scan mantığını anlatabilirmisiniz? ne işe yarıyor hangi durumda kullanılıyorlar?
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
fox4um » Raporlar ve Etiketler » Scatter ve Scan ?
programda kullanılan Scatter ve scan mantığını anlatabilirmisiniz? ne işe yarıyor hangi durumda kullanılıyorlar?
Cornelian;
SCAN / ENDSCAN; açık bir tabloyu yada cursor 'u başından sonuna kadar HIZLI bir şekilde taramanı sağlıyor.İstersen tarama koşulunu FOR tümceciği ile koşllandırabilirsin. Tablo/Cursor tarama işleminde gerekli hesaplamalarını yada atama işlemlerini yapabilirsin!
Scatter komutu ile birtablo/cursor üzerindeki tüm field ları bir DİZİ yada bir NESNE ye atayabiliyorsun. Bu dizi yada nesneyi istediğin gibi kullanıp, gerek gördüğün takdirde GATHER ile tekrardan tablo/cursor fieldlarını güncelleyebilirsin.
Önemli bir kaç not :
- SCAN / ENDSCAN komut dizisi; DO WHILE / "SKIP" / ENDDO komut dizisine göre çok daha HIZLI ve efektif çalışır!
- Eğer iç içe SCAN / ENDSCAN kullanıyorsan; 'SELECT' ile iç içe TABLO larda ki ALIAS durumunu kontrol etmelisin
Her iki komut içinde forumda bir çok örnek mevcut. Forum 'un arama başlığında arama yapabilirsin.
Uğur merhaba.
Bu durumda her zaman Do while / Enddo komut dizisi yerine scan / endscan kullanılmasını önerirmisin ?
Hangi durumlarda do while/enddo komutu yararlı olur ?
Teşekkürler..
arama yı
sele table1
go top
do while .not. eof()
....
....
sele table1
skip
enddo
şeklinde de yapabilirsin. Data küçük ise yavaşlık hissetmezsin.
Ama hızlısı : scan / endscan dir. ( Ben genelde bunu kullanıyorum )
Başka alternatif :
sele table1
set order to adsoyad && adsoyad a göre index gerektirir.
set key to isim1 && filitrelemek istediğin kelime
go top
if not eof()
* buldun
else
* yok
endif
şeklinde de arayabilirsin.
Bu biraz kullanacağın yere bağlı
Hasan Merhaba;
Ben genel olarak SCAN / ENDSCAN kullanıyorum ve tavsiye ediyorum ( Çetin Üstad 'ın öğretilerinden! ). Büyük bir tabloda; aynı işi gören bir do while / scan endscan kıyaslamasında bariz biçimde gösteren hız farkı görebiliyorsun.
Bazı durumlarda ise do while kullanmak gerekiyor, özellikle iç içe tablo taramalarında kontroller daha basit.
Eğer tablolardan bahsediyorsak:
Scan...endscan
Do while ... enddo nun yaptığı herşeyive fazlasını da sağlıyor. Daha hızlı. Do while'ın desteklemediği destekleri var:
for ... ve scope
do while ise sadece while. Aynı zamanda do while ile pointer kontrolü sendedir tamamen, scan ise senin yerine skip yapar ya da en başlangıçta başa sarar. Aynı zamanda ilişkilendirildiği cursoru bilir, workarea değiimlerinden etkilenmez. Do while ile kendin daima doğru workarea daolup olmadığını kontrol etmelisin.
Uzun lafın kısası, scan...endscan kullanabildiğin yerde onu kullanmak daha faydalı.
Do while ... enddo tarihsel olarak daha eski, scan ... endscan yenilik olarak geldi.
Bu arada orijinal soru pek anlaşılmıyor. Programda durup dururken scan ... endscan ve scatter kullanılmaz. Biraz daha özel soru olsa nedenini açıklayabilirdik.
Herhalde clipper ile başladığımdan olsa gerek bugüne kadar % 98 Dowhile / Enddo kullandım. Büyük datalarda hız düşmesini de yaşadım tabii.. Verdiğiniz bilgilere teşekkür ederim. Uzun bir data kullanan programımı hemen uyarlıyacağım.
fox4um » Raporlar ve Etiketler » Scatter ve Scan ?