1

Konu: select komutu

Visual Fox Pro
Set NullDisplay To "0"

Select Year(tarih) ,Month(tarih) Distinct From hst  Where !Empty(tarih) Group By 1,2 Into Cursor seneler1
m.aylar=Reccount('seneler1')
Select Alltrim(asi)+"--"+Alltrim(gurup) asi,Sum(miktar) giren From fatura;
    WHERE !Empty(asi) Group By 1 Into Cursor gelasi
Select Alltrim(asi)+"--"+Alltrim(gurup)  asi, Sum(stok) stok From asilar ;
    WHERE skul>Date()-1 Group By 1     Into Cursor stokasi
Select *,"                        " gurup From asilama Into Cursor asilama1 Readwrite
Select asi
Go Top
Do While.T.
    Select asilama1
    Replace All gurup With asi.gurup For asilama1.asi=asi.asi
    Select asi
    If Eof() Or Bof()
        Exit
    Else
        Select asi
        Skip+1
    Endif
Endd
Select asilama1
 
Select Alltrim(asi)+"--"+Alltrim(asilama1.gurup)  asi, Sum(miktar) cikan, ;
    Sum(Iif( Month(atar)=>1 And  Month(atar)<4 , miktar, 0)) As ilkdort, ;
    Sum(Iif( Month(atar)=>4 And  Month(atar)<8 , miktar, 0)) As ortadort, ;
    Sum(Iif( Month(atar)=>8, miktar, 0)) As sondort,Avg(miktar) ortalama1 ;
    From asilama1 ;
    Group By 1 ;
    INTO Cursor bir
Select Alltrim(asi)+"--"+Alltrim(asi.gurup)  asi From asi Group By 1 Into Cursor asi1 Readwrite
Select  * From asi1;
    LEFT Join bir;
    on asi1.asi=bir.asi;
    LEFT Join gelasi;
    on asi1.asi=gelasi.asi ;
    LEFT Join stokasi;
    on asi1.asi=stokasi.asi ;
    INTO Cursor asigenel
Select asi_a urunler,giren,cikan,stok,ilkdort,ortadort,sondort,"AŞI" gurup,Ceiling(ortalama1) ortalama1 From asigenel;
    INTO Cursor asigenel Readwrite

Bu kod düzgün hale nasıl gelir ?
özellikle döngüden nasıl kurtulabilirim ?
Şimdiden teşekkürler.

2 Son düzenleyen, konuka (06.01.2013 14:07:40)

Re: select komutu

Sorunun VFP SELECT olduğunu varsayıyorum (SQL SELECT değil)
İlk bakışta kodun çalışacağını ve loop dışına çıkacağını düşünüyorum, sorduğuna göre öyle olmamalı - belki aşağıdaki öneriler işine yarar:

1. Öncelikle DO WHILE .t. çok eski, DBase 2 den falan gelen teknik.
GO TOP komutu kullanıyorsan DO WHILE ! EOF() şeklinde yapılabilinir.
2. değişik alanlarda çalışırken bir variable kullanmak daha ehven-i şer
3. Birden fazla alan varsa IN kullanmak da iyi olabilir
4. Replace All gurup With  m.lcgurup For asilama1.asi=m.lcasi IN asilama1 yerine
   UPDATE asilama1 SET gurup=m.lcgurup WHERE asilama1.asi=m.lcasi  daha hızlı olabilir hem de SELECT asi ve Select asilama1 komutlarına gerek kalmaz
5. (düzenleme) aklıma şimdi geldi asi ve asima1 arasında relation var ise loop bitmeyebilir, recordpointer asima1'de her oynadığında asi'de de oynar.

Visual Fox Pro
GO TOP IN asi

Do While ! Eof()
    m.lcasi= asi.asi
    m.lcgurup= asi.grup
    Select asilama1
    Replace All gurup With  m.lcgurup For asilama1.asi=m.lcasi IN asilama1
    Select asi
    Skip  &&+1
Endd


veya

Visual Fox Pro
GO TOP IN asi

Do While ! Eof()
    m.lcasi= asi.asi
    m.lcgurup= asi.grup
    UPDATE asilama1 SET gurup=m.lcgurup WHERE asi=m.lcasi
    Skip  &&+1
Endd


hatta (hazır Çetin ortada yokken kendi ligimizde bir işe yarayayım)

Visual Fox Pro
SCAN

    SCATTER FIELDS asi, gurup MEMV
    UPDATE asilama1 SET gurup=m.gurup WHERE asi=m.asi
EndS
VFP9 SP2

3

Re: select komutu

Visual Fox Pro
update asilama1 set asilama1.gurup=asi.gurup where asilama1.asi=asi.asi

4

Re: select komutu

Üstadlarım teşekkürler...

anladığım kadarıyle do while yerine scan, replace yerine de update kullanmak gerekiyor.

5

Re: select komutu

Visual Fox Pro
Select *,"                        " gurup From asilama Into Cursor asilama1 Readwrite

 
Update asilama1 ;
    set  gurup = asi.gurup ;
    from asi ;
    where asilama1.asi=asi.asi

Ama buna gerek var mi?

Visual Fox Pro
Select asilama.*,asi.gurup as gurup ;

From asilama ;
left join asi on asilama.asi=asi.asi ;
Into Cursor asilama1 ;
Readwrite
Select asilama1

(Ali pardon:)