1

Konu: Bu işin daha kısa yolu var mı; yoksa belki birilerinin işine yarar.

Sevgili Arkadaşlar,
Kitaplarımı düzenlerken bir kitabın arasından eski bir program çıktısının bir sayfası çıktı.
80 li yılların başlarında Atatürk barajının yedek parça işlerinden sorumluydum. O sıralarda yedek parça programı yok. Amerikadan bir program bulduk ama ingilizce; bizim ambarcılar ise türkceyi bile doğru dürüst kıvıramıyorlar. Üstelik de program sonderece karışık. Mecburen iş başa düştü. Oturup önce dBase ile ardından da Clipper ile program yazıp işimizi yürütmeye çalışıyorum. Bende o zamanlarda programcılık bilgisi sıfır. 100.000 nin üzerinde yedek parça. Yüzlerce marka ve model makina var. Ambardakiler birşeyler istiyor; ben de onların isteklerini yerine getirmeğe çalışıyorum. Beni ençok zorlayan konu ise aramalardı. (Bu arada hemen şunu ekleyeyim; o sıralarda nedense index dosyaları sık sık bozulurdu. Index dosyalarını tamir eden bir program bile yazmıştım.) Her allahın günü gelib "şununla şunu bir de şunu aramak istiyoruz olmuyor." diye istekte bulunuyorlardı. Sonunda 11 fieldde rast gele kombinezonlarla arama yapacak birşeyler gerekti. Bu işi yapmak için yazdığım kodlar karışıyor, boyuna eksiklikler ve yanlışlıklar çıkıyordu. Sonunda bu işe çok basit bir çözüm buldum ve çözüm öylesine hoşuma gitmiştiki günlerce ortalıkta horoz gibi kabarıp dolaşmıştım.
   İşte bulduğum kod çıktısı o çözümün sayfasıydı. Oturup test ettim; hala çok güzel çelışıyor. Eger bu çözümün daha kısa yolu varsa lütfen bildirin; yoksa belki böyle alengirli aramalarda işinize yarar.
Sevgilerimle.
Erdal

Not: Benim kod yazışım size garip gelebilir ama kusuruma bakmayın.

Visual Fox Pro
Store "" To V_ara, V_filter

If ! Empty(V_Tarih)
    V_ara = dtoc(V_Tarih)
       V_filter = "dtoc(tarih)"
    Endif
If !Empty(V_Gorevli)
    V_ara = V_ara+UPPER(Alltrim(V_Gorevli))
    IF !EMPTY(V_filter)
    V_filter = V_filter+"+substr(UPPER(ALLTRIM(gorevli)),1,L_grvli)"
    ELSE
    V_filter= V_filter+"substr(UPPER(ALLTRIM(gorevli)),1,L_grvli)"
    ENDIF
Endif
If !Empty(V_Gorev)
    V_ara = V_ara+UPPER(Alltrim(V_Gorev))
    IF ! EMPTY(V_filter)
    V_filter = V_filter+"+SUBSTR(UPPER(alltrim(gorev)),1,L_grv)"
        ELSE
    V_filter = V_filter+"SUBSTR(UPPER(alltrim(gorev)),1,L_grv)"
        ENDIF
ENDIF
Locate For V_ara == &V_filter
 
If ! Eof()
    Set Filter To V_ara == &V_filter
 
        Brow
    Endif
Set Filter To

2 Son düzenleyen, cetinbasoz (15.03.2011 14:05:30)

Re: Bu işin daha kısa yolu var mı; yoksa belki birilerinin işine yarar.

Abi,
Guzel yazmissin. Ben soyle birseyi kullaniyorum genelde:

Visual Fox Pro
v_filter = ''

If !Empty(m.V_Tarih)
  v_filter = m.v_filter + Iif( Empty(m.v_filter),'',' and ') + 'tarih = m.v_tarih'
Endif
If !Empty(m.V_Gorevli)
  v_filter = m.v_filter + Iif( Empty(m.v_filter),'',' and ') + 'upper(gorevli) == upper(m.V_gorevli)'
Endif
If !Empty(V_Gorev)
  v_filter = m.v_filter + Iif( Empty(m.v_filter),'',' and ') + 'upper(gorev) == upper(m.V_gorev)'
Endif
 
IF !EMPTY(m.v_filter)
    v_filter = 'where '+m.v_filter
*    v_filter = 'for '+m.v_filter
ENDIF
 
* Locate &v_filter
 
*If !Eof()
*  BROWSE &v_filter
*Endif
 
SELECT * FROM (ALIAS()) &v_filter

3

Re: Bu işin daha kısa yolu var mı; yoksa belki birilerinin işine yarar.

Sevgili Çetin,
Gosterdiğin yol elbette ki benim 30 yıllık kodumdan daha kısa. İlk fırsatta deneğeceğim. Ama anlaşılan o ki 30 yılda köprülerin altından çok sular geçmiş gibi görünse de aslında pek birşey geçmemiş.
Teşekkür ve sevgilerimle.
Erdal.