1 Son düzenleyen, avrasya34 (03.08.2009 23:27:30)

Konu: Benden bukadar gerisi sizin işiniz

Hocalarım ;
Ben sayenizde foxdostan visuale geçtim ve ne öğrendimsede sayenizde öğrendim hepinize öncelikle teşekkür ederim.

Dostayken rapor dosyasıyla pek uğraşmamıştım buraya takıldıktan sonraysa biraz onunla uğraşayım dedim. sağolsun özcan hocam bayağı yardım etti bana onun yardımıyla bir kod yazdım. kod gayet iyi çalışıyor (du) 9000 kayıtı 30 saniyede derliyordu.
yaptığı iş şu asilar ve hastalıklar dosyasının içindeki kayitları verilen tarih aralığına göre derliyor. sonuç olarakda hangi cins hayvana hangi aşıdan ne kadar yapıldığını buluyor

Visual Fox Pro
local hcinsi,asicinsi,totasicnt,tottoplam,asa,aa

thisform.ay=1
sele rapor
dele all
sele asilama
if empty(this.parent.combo2.DisplayValue)
    sele * from asilama where between(atar, (this.parent.text1.Value),(this.parent.text2.Value)) into cursor kaykay
    sele * from hastalik where between(tarih, this.parent.text1.Value,this.parent.text2.Value) into cursor hastarap
else
    sele * from asilama where between(atar, this.parent.text1.Value,this.parent.text2.Value) and alltrim(asilama.not)=this.parent.combo2.Value into cursor kaykay
    sele * from hastalik where between(tarih, this.parent.text1.Value,this.parent.text2.Value) and alltrim(asilama.not)=this.parent.combo2.Value into cursor hastarap
endif
sele kaykay
m.Hcinsi=Alltrim(kaykay.not)
m.Asicinsi=alltrim(kaykay.asi)
m.TotAsiCnt = 0
m.tottoplam=kaykay.miktar
do while !Eof()
    m.Hcinsi=Alltrim(kaykay.not)
    m.Asicinsi=alltrim(kaykay.asi)
    m.tottoplam=kaykay.miktar
    sele rapor
    Locate For  rapor.HCinsi=m.HCinsi  AND rapor.AsiCinsi=m.AsiCinsi
        if found()
            m.TotAsiCnt =rapor.TotAsiCnt + 1
            m.tottoplam=rapor.toplam + m.tottoplam
            replace rapor.toplam with m.tottoplam,;
                    rapor.TotAsiCnt with m.TotAsiCnt
        else
            appe blank
            replace hcinsi with m.hcinsi,;   
                    Asicinsi with m.Asicinsi,;   
                    TotAsiCnt with 1,;
                    toplam with m.tottoplam
        endif
    sele kaykay
    skip
endd
sele hastarap
******hastaliklar
    m.Hcinsi1=Alltrim(hastarap.cins)
    m.TotAsiCnt1 = 0
do while !Eof()
    m.Hcinsi1=Alltrim(hastarap.cins)
    sele rapor
    Locate For HCinsi=m.HCinsi1 and rapor.Asicinsi="hastalıklar"
        if found()
            m.TotAsiCnt1 =rapor.TotAsiCnt + 1
            replace rapor.TotAsiCnt with m.TotAsiCnt1
        else
            appe blank
            replace rapor.hcinsi with m.hcinsi1    ,;
                    rapor.Asicinsi with "hastalıklar" ,;
                    rapor.TotAsiCnt with 1
        endif
    sele hastarap
    skip
endd


daha sonra aklıma select komutu takıldı big_smile

Visual Fox Pro
SELECT  asilama.not Cinsler ,asi Asilar, ;

    count(asi) as Mikatar ,SUM(miktar) as gentop1 FROM asilama ;
    GROUP BY 1,2 ;
    WHERE !(asilama.asi =='') AND between(atar, (this.parent.container3.text1.Value),(this.parent.container3.text2.Value)) ;
    order by 1,2;
    INTO CURSOR tamrap1 READWRITE
SELECT cins cinsler,count(teshis) as Mikatar FROM hastalik ;
    WHERE !(hastalik.teshis =='') AND between(tarih, (this.parent.container3.text1.Value),(this.parent.container3.text2.Value)) ;
    group BY 1;
    INTO CURSOR hasta1
INSERT INTO tamrap1 (cinsler,mikatar) ;
SELECT  Cinsler ,mikatar ;
    FROM hasta1
SELECT tamrap1
REPLACE ALL tamrap1.asilar WITH "Hastalıklar" FOR  EMPTY(tamrap1.asilar)
this.Parent.grid1.RecordSource="tamrap1"

Bu kod 2. ye oranla inanılmaz hızlı....
şeytan rahat bırakmadı beni 3 gündür uğraşıyorum buna benzer raporu tek bir select komutuyla alabilirmiyim diye. 

üstadlara bir sorayım dedim big_smile

2 Son düzenleyen, ugurlu2001 (04.08.2009 09:03:49)

Re: Benden bukadar gerisi sizin işiniz

Visual Fox Pro
WITH This.Parent 

    SELECT  ;
            Asilama.not As Cinsler, ;
            Nvl(Asilama.Asi, 'Hastaliklar') As Asilar, ;
            Count(Asi) as Mikatar, ;
            SUM(Miktar) as Gentop1 ;
        FROM Asilama ;
        GROUP BY 1,2 ;
        WHERE !(Asilama.Asi =='') ;
                AND between(atar, (.container3.text1.Value),(.container3.text2.Value)) ;
        Order by 1,2;
        INTO CURSOR Tamrap1 READWRITE
 
    INSERT INTO Tamrap1 (Cinsler, Mikatar) ;
            SELECT  Cinsler, Mikatar ;
                FROM ( ;
                    SELECT ;
                            Cins As Cinsler, ;
                            Count(Teshis) as Mikatar ;
                        FROM Hastalik ;
                        WHERE !(Hastalik.teshis == '') AND Between(tarih, (.container3.text1.Value),(.container3.text2.Value)) ;
                        group BY 1 )
 
    .grid1.RecordSource="Tamrap1"
ENDWITH
 
 
Nvl(Asilama.Asi, 'Hastaliklar') As Asilar, ;
 
*olmazsa; yerine aşağıdakini dene. Çünkü Null ve Empty aynı şey değil.
 
Iif(EMPTY(tamrap1.asilar),"Hastaliklar",tamrap1.asilar)
 
 
* Birde With / ENDWITH den emin diilim. Data olmadığı için test edemedim.
* Gerekiyorsa This.Parent kısımlarını eski haline getirebilirsin.
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3 Son düzenleyen, ugurlu2001 (04.08.2009 10:04:32)

Re: Benden bukadar gerisi sizin işiniz

Avrasya; Sanki aşağıdaki senin istediğine daha yakın.
Birde Çetin Üstad ın örnek data kısmı ile data aktarıp ne istediğini açıklayabilirsen daha kolay olur.

Visual Fox Pro
SELECT  ;

        Asilama.not As Cinsler, ;
        Iif(EMPTY(Asilama.Asi), "Hastaliklar", Asilama.Asi) As Asilar, ;
        Count(Asi) as Mikatar, ;
        Cast(SUM(Miktar) As B) as Gentop1 ;
    FROM Asilama ;
    WHERE !(Asilama.Asi =='') ;
                AND Between(Atar, (This.Parent.container3.text1.Value),(This.Parent.container3.text2.Value)) ;
    GROUP BY 1,2 ;
Union ;
    SELECT ;
            Cins As Cinsler, ;
            'Hastaliklar' As Asilar, ;
            Count(Teshis) As Mikatar, ;
            Cast(0 As B) As GenTop1 ;
        FROM Hastalik ;
        WHERE !(Hastalik.teshis == '') AND Between(tarih, (This.Parent.container3.text1.Value),(This.Parent.container3.text2.Value)) ;
        group BY 1,2 ;
    Order by 1,2;
    INTO CURSOR Tamrap1 READWRITE;
 
This.Parent.grid1.RecordSource="Tamrap1"

Not:
Asilama.DBF yi "Asi" ve "Atar" fieldlarına göre;
Hastalik.Dbf 'yi Teshis ve Tarih field larına göre indexlersen sonucu çok daha hızlı alırsın.
Senin sorgunda birleşik index daha iyi görünüyor.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: Benden bukadar gerisi sizin işiniz

Ugur un son yazdigi Union lu SQL en pratik olani,
ekstradan insert,update,replace vs lerle ugrasmazsin. Dikkat edersen UNION un sarti olan kolon sayisi ve alan tipleri nin ayni olmasi Ugur guzel bir kodlama yapmis.

5 Son düzenleyen, ugurlu2001 (04.08.2009 11:17:13)

Re: Benden bukadar gerisi sizin işiniz

Soykan abi iltifat için çok teşekkür ederim smile

Forumda; eli değince bu kodu daha optimize edip daha kısaltıcak olan Üstad ve Ustalar 'dan daha öğrenicek çok şeyimiz var.

Kendi adıma, daha olmadım diyebilirim. Bu gidişle de olamıycaz gibi geliyor. Çetin Üstadı, Metin'i, Timuçin abiyi, seni, Birolu, Konuka'yı Tarkan'ı, Cemal 'i, Ahmet 'i ve forumda aktif olan diğer tüm arkadaşları  gördükçe daha çook yolumuz var. smile

Bu arada Fox ile ilgili ne öğrendiysem Forumdan öğrendim diyebilirim. Üstad ve Usta lara sonsuz saygılar...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: Benden bukadar gerisi sizin işiniz

hep beraber yuvarlanip gidiyoruz iste smile

7

Re: Benden bukadar gerisi sizin işiniz

2. kod hata verdi hata: error building sort key
indexler söylediğin gibi zaten var hocam


Örnek datalar
**************************
CreateCursor_ASILAMA()
CreateCursor_HASTALIK()


Procedure CreateCursor_ASILAMA
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
1,01/22/2001,"DRONCIT","KEDİ",04/22/2001,"",/  /,"",1,0
2,12/12/1999,"MANTAR","KÖPEK",01/11/2000,"606011",09/01/2006,"BIOCAN",1,0
2,06/26/1999,"KARMA","KÖPEK",/  /,"",/  /,"",0,0
2,04/17/2003,"BARTOTELLA","KÖPEK",04/17/2004,"",/  /,"",0,0
2,06/11/2003,"KUDUZ","KÖPEK",06/11/2004,"",/  /,"",0,0
2,05/25/2003,"TETANOZ","KÖPEK",05/25/2004,"",/  /,"",0,0
2,12/24/2003,"DRONCIT","KÖPEK",03/24/2004,"",/  /,"",0,0
2,12/24/2003,"İVOMEK","KÖPEK",03/24/2004,"",/  /,"",0,0
3,04/01/1999,"KUDUZ","KEDİ",04/01/2000,"",/  /,"",0,0
3,04/01/1999,"DRONCIT","KEDİ",07/01/1999,"",/  /,"",0,0
4,04/29/2001,"KARMA","KÖPEK",04/29/2002,"",/  /,"",0,0
4,04/29/2001,"BARTOTELLA","KÖPEK",04/29/2002,"",/  /,"",0,0
4,01/20/2002,"KUDUZ","KÖPEK",01/20/2003,"",/  /,"",0,0
4,01/21/2001,"MANTAR","KÖPEK",01/21/2002,"",/  /,"",0,0
4,01/21/2001,"MANTAR","KÖPEK",/  /,"",/  /,"",0,0
4,01/20/2002,"DRONCIT","KÖPEK",04/20/2002,"",/  /,"",0,0
4,01/20/2002,"İVOMEK","KÖPEK",04/20/2002,"",/  /,"",0,0
6,04/01/1999,"KARMA","KÖPEK",04/01/2000,"",/  /,"",0,0
7,05/04/2000,"KARMA","KÖPEK",05/04/2001,"",/  /,"",0,0
7,05/04/2000,"BARTOTELLA","KÖPEK",05/04/2001,"",/  /,"",0,0

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR ASILAMA ;
( ;
  NO N(20,0)  NOT  NULL  ;
  ,ATAR D(8,0)  NOT  NULL  ;
  ,ASI C(25,0)  NOT  NULL  ;
  ,NOT C(25,0)  NOT  NULL  ;
  ,RANTAR D(8,0)  NOT  NULL  ;
  ,SERNO C(15,0)  NOT  NULL  ;
  ,SKULL D(8,0)  NOT  NULL  ;
  ,FIRM C(15,0)  NOT  NULL  ;
  ,MIKTAR N(10,0)  NOT  NULL  ;
  ,NO1 N(10,0)  NOT  NULL  ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

Procedure CreateCursor_HASTALIK
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
1,1,12/12/2003,"Mix Enfeksiyon",0.0,0,0,0,"KEDİ","E:\FPW26SON\I_1.GIF",""
2,2,04/03/2007,"GASTRİT",0.0,0,0,0,"KÖPEK","",""
1,1328,04/07/2007,"Orchydectomie",0.0,0,0,0,"KEDİ","",""
1,697,04/12/2007,"conjuktivit",0.0,0,0,0,"KEDİ","",""
1,1419,04/15/2007,"ENTERİT",40.0,0,0,0,"KÖPEK","",""
1,1170,03/20/2007,"Toksikasyon",0.0,0,0,0,"KÖPEK","",""
2,1419,04/18/2007,"enterit devam",0.0,0,0,0,"KÖPEK","",""
1,1422,04/11/2007,"APSE+KUYRUK AMPUTASYONU",0.0,0,0,0,"KÖPEK","",""
1,1101,04/20/2007,"OTİTİS EXTERNA",0.0,0,0,0,"KEDİ","",""
3,1101,04/10/2007,"USY",0.0,0,0,0,"KEDİ","",""
1,1423,04/21/2007,"TARTAR",0.0,0,0,0,"KEDİ","",""
1,1344,01/16/2007,"OVARYOHYSTERECTOMİE",0.0,0,0,0,"KEDİ","",""
1,1424,04/21/2007,"CONJUKTİVİTİS",0.0,0,0,0,"KÖPEK","",""
1,1425,04/23/2007,"trawmatik yara",0.0,0,0,0,"KEDİ","",""
9,959,04/27/2007,"SAĞ ARKA MEMEDE APSE",0.0,0,0,0,"KÖPEK","",""
3,959,01/23/2005,"PSEUDO OSTRUS",0.0,0,0,0,"KÖPEK","",""
4,959,03/19/2005,"GIDAİ İMDİGESTİON",0.0,0,0,0,"KÖPEK","",""
5,959,08/09/2005,"PARAZİTER İNVAZYON",0.0,0,0,0,"KÖPEK","",""
6,959,01/23/2006,"OTİTİS EXTERNA",0.0,0,0,0,"KÖPEK","",""
7,959,05/23/2006,"PSEUDO OSTRUS",0.0,0,0,0,"KÖPEK","",""

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR HASTALIK ;
( ;
  NO1 N(3,0)  NOT  NULL  ;
  ,NO N(20,0)  NOT  NULL  ;
  ,TARIH D(8,0)  NOT  NULL  ;
  ,TESHIS C(30,0)  NOT  NULL  ;
  ,ATES N(4,1)  NOT  NULL  ;
  ,NABIZ N(3,0)  NOT  NULL  ;
  ,SOLUNUM N(3,0)  NOT  NULL  ;
  ,S1 M(4,0)  NOT  NULL  ;
  ,SURE N(3,0)  NOT  NULL  ;
  ,CINS C(10,0)  NOT  NULL  ;
  ,ANAMNEZ M(4,0)  NOT  NULL  ;
  ,RESIM C(125,0)  NOT  NULL  ;
  ,ACIKLAMA C(254,0)  NOT  NULL NOCPTRANS ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

Buda Olmasını istediğim data
CreateCursor_tamrap()


Procedure CreateCursor_tamrap
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
"KEDİ","CANİVERM 175",42,42
"KEDİ","CESTODAN",92,92
"KEDİ","FRONTLİNE",72,72
"KEDİ","KARMA",72,72
"KEDİ","KUDUZ",60,60
"KEDİ","LEUCOSEL",56,56
"KEDİ","MANTAR",22,22
"KEDİ","PARATAK PLAS TABLET",7,7
"KEDİ","TERRANECRONE",1,1
"KEDİ","İVOMEK",9,9
"KÖPEK","BARTOTELLA",49,49
"KÖPEK","BIOCAN-B",7,7
"KÖPEK","CANİVERM 700",75,139
"KÖPEK","CESTODAN",3,3
"KÖPEK","CORONA VİRUS",2,2
"KÖPEK","FRONTLİNE",64,64
"KÖPEK","KARMA",58,58
"KÖPEK","KUDUZ",55,55
"KÖPEK","MANTAR",22,22
"KÖPEK","PARATAK PLAS",16,28
"KÖPEK","İVOMEK",1,1
"KEDİ","Hastalıklar",117,0
"KUŞ","Hastalıklar",5,0
"KÖPEK","Hastalıklar",71,0

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR tamrap ;
( ;
  CINSLER C(25,0)  NOT  NULL  ;
  ,ASILAR C(25,0)  NOT  NULL  ;
  ,MIKATAR N(10,0)  NOT  NULL  ;
  ,GENTOP1 N(16,0)  NOT  NULL  ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

8

Re: Benden bukadar gerisi sizin işiniz

Bu kod dene bakalim


Visual Fox Pro
CreateCursor_ASILAMA()

CreateCursor_HASTALIK()
 
Select  ;
    ASILAMA.Not As Cinsler, ;
    NVL(ASILAMA.ASI,'Hastaliklar') As Asilar, ;
    Count(ASI) As Mikatar, ;
    Cast(Sum(MIKTAR) As B) As Gentop1 ;
    FROM ASILAMA ;
    WHERE !(ASILAMA.ASI =='') ;
    AND Between(ATAR, date(1999,01,01),date(2005,01,01)) ;
    GROUP By 1,2 ;
    Union ;
    SELECT ;
    CINS As Cinsler, ;
    'Hastaliklar' As Asilar, ;
    Count(TESHIS) As Mikatar, ;
    Cast(0 As B) As Gentop1 ;
    FROM HASTALIK ;
    WHERE !(HASTALIK.TESHIS == '') And Between(TARIH, date(1999,01,01),date(2005,01,01)) ;
    group By 1,2 ;
    Order By 1,2;
    INTO Cursor Tamrap1 Readwrite
 
 
BROWSE NORMAL
 
 
Procedure CreateCursor_ASILAMA
    Local lcData, lcTemp
    lcTemp = Sys(2015)+'.tmp'
    TEXT TO m.lcData noshow
1,01/22/2001,"DRONCIT","KEDİ",04/22/2001,"",/  /,"",1,0
2,12/12/1999,"MANTAR","KÖPEK",01/11/2000,"606011",09/01/2006,"BIOCAN",1,0
2,06/26/1999,"KARMA","KÖPEK",/  /,"",/  /,"",0,0
2,04/17/2003,"BARTOTELLA","KÖPEK",04/17/2004,"",/  /,"",0,0
2,06/11/2003,"KUDUZ","KÖPEK",06/11/2004,"",/  /,"",0,0
2,05/25/2003,"TETANOZ","KÖPEK",05/25/2004,"",/  /,"",0,0
2,12/24/2003,"DRONCIT","KÖPEK",03/24/2004,"",/  /,"",0,0
2,12/24/2003,"İVOMEK","KÖPEK",03/24/2004,"",/  /,"",0,0
3,04/01/1999,"KUDUZ","KEDİ",04/01/2000,"",/  /,"",0,0
3,04/01/1999,"DRONCIT","KEDİ",07/01/1999,"",/  /,"",0,0
4,04/29/2001,"KARMA","KÖPEK",04/29/2002,"",/  /,"",0,0
4,04/29/2001,"BARTOTELLA","KÖPEK",04/29/2002,"",/  /,"",0,0
4,01/20/2002,"KUDUZ","KÖPEK",01/20/2003,"",/  /,"",0,0
4,01/21/2001,"MANTAR","KÖPEK",01/21/2002,"",/  /,"",0,0
4,01/21/2001,"MANTAR","KÖPEK",/  /,"",/  /,"",0,0
4,01/20/2002,"DRONCIT","KÖPEK",04/20/2002,"",/  /,"",0,0
4,01/20/2002,"İVOMEK","KÖPEK",04/20/2002,"",/  /,"",0,0
6,04/01/1999,"KARMA","KÖPEK",04/01/2000,"",/  /,"",0,0
7,05/04/2000,"KARMA","KÖPEK",05/04/2001,"",/  /,"",0,0
7,05/04/2000,"BARTOTELLA","KÖPEK",05/04/2001,"",/  /,"",0,0
 
    ENDTEXT
 
    Strtofile(m.lcData,m.lcTemp)
 
    Create Cursor ASILAMA ;
        ( ;
        NO N(20,0)  Not  Null  ;
        ,ATAR D(8,0)  Not  Null  ;
        ,ASI C(25,0)  Not  Null  ;
        ,Not C(25,0)  Not  Null  ;
        ,RANTAR D(8,0)  Not  Null  ;
        ,SERNO C(15,0)  Not  Null  ;
        ,SKULL D(8,0)  Not  Null  ;
        ,FIRM C(15,0)  Not  Null  ;
        ,MIKTAR N(10,0)  Not  Null  ;
        ,NO1 N(10,0)  Not  Null  ;
        )
 
    Append From (m.lcTemp) Type Delimited
    Erase (m.lcTemp)
Endproc
 
Procedure CreateCursor_HASTALIK
    Local lcData, lcTemp
    lcTemp = Sys(2015)+'.tmp'
    TEXT TO m.lcData noshow
1,1,12/12/2003,"Mix Enfeksiyon",0.0,0,0,0,"KEDİ","E:\FPW26SON\I_1.GIF",""
2,2,04/03/2007,"GASTRİT",0.0,0,0,0,"KÖPEK","",""
1,1328,04/07/2007,"Orchydectomie",0.0,0,0,0,"KEDİ","",""
1,697,04/12/2007,"conjuktivit",0.0,0,0,0,"KEDİ","",""
1,1419,04/15/2007,"ENTERİT",40.0,0,0,0,"KÖPEK","",""
1,1170,03/20/2007,"Toksikasyon",0.0,0,0,0,"KÖPEK","",""
2,1419,04/18/2007,"enterit devam",0.0,0,0,0,"KÖPEK","",""
1,1422,04/11/2007,"APSE+KUYRUK AMPUTASYONU",0.0,0,0,0,"KÖPEK","",""
1,1101,04/20/2007,"OTİTİS EXTERNA",0.0,0,0,0,"KEDİ","",""
3,1101,04/10/2007,"USY",0.0,0,0,0,"KEDİ","",""
1,1423,04/21/2007,"TARTAR",0.0,0,0,0,"KEDİ","",""
1,1344,01/16/2007,"OVARYOHYSTERECTOMİE",0.0,0,0,0,"KEDİ","",""
1,1424,04/21/2007,"CONJUKTİVİTİS",0.0,0,0,0,"KÖPEK","",""
1,1425,04/23/2007,"trawmatik yara",0.0,0,0,0,"KEDİ","",""
9,959,04/27/2007,"SAĞ ARKA MEMEDE APSE",0.0,0,0,0,"KÖPEK","",""
3,959,01/23/2005,"PSEUDO OSTRUS",0.0,0,0,0,"KÖPEK","",""
4,959,03/19/2005,"GIDAİ İMDİGESTİON",0.0,0,0,0,"KÖPEK","",""
5,959,08/09/2005,"PARAZİTER İNVAZYON",0.0,0,0,0,"KÖPEK","",""
6,959,01/23/2006,"OTİTİS EXTERNA",0.0,0,0,0,"KÖPEK","",""
7,959,05/23/2006,"PSEUDO OSTRUS",0.0,0,0,0,"KÖPEK","",""
 
    ENDTEXT
 
    Strtofile(m.lcData,m.lcTemp)
 
    Create Cursor HASTALIK ;
        ( ;
        NO1 N(3,0)  Not  Null  ;
        ,NO N(20,0)  Not  Null  ;
        ,TARIH D(8,0)  Not  Null  ;
        ,TESHIS C(30,0)  Not  Null  ;
        ,ATES N(4,1)  Not  Null  ;
        ,NABIZ N(3,0)  Not  Null  ;
        ,SOLUNUM N(3,0)  Not  Null  ;
        ,S1 M(4,0)  Not  Null  ;
        ,SURE N(3,0)  Not  Null  ;
        ,CINS C(10,0)  Not  Null  ;
        ,ANAMNEZ M(4,0)  Not  Null  ;
        ,RESIM C(125,0)  Not  Null  ;
        ,ACIKLAMA C(254,0)  Not  Null NoCPTrans ;
        )
 
    Append From (m.lcTemp) Type Delimited
    Erase (m.lcTemp)
Endproc

9 Son düzenleyen, avrasya34 (04.08.2009 21:41:46)

Re: Benden bukadar gerisi sizin işiniz

Evet işte bu hatasız oldu. Teşekkürler hocam

Visual Fox Pro
Select  ;

    ASILAMA.Not As Cinsler, ;
    NVL(ASILAMA.ASI,'Hastaliklar') As Asilar, ;
    Count(ASI) As Mikatar, ;
    Cast(Sum(MIKTAR) As B) As Gentop1 ;
    FROM ASILAMA ;
    WHERE !(ASILAMA.ASI =='') ;
    AND Between(ATAR, date(1999,01,01),date(2005,01,01)) ;
    GROUP By 1,2 ;
    Union ;
    SELECT ;
    CINS As Cinsler, ;
    'Hastaliklar' As Asilar, ;
    Count(TESHIS) As Mikatar, ;
    Cast(0 As B) As Gentop1 ;
    FROM HASTALIK ;
    WHERE !(HASTALIK.TESHIS == '') And Between(TARIH, date(1999,01,01),date(2005,01,01)) ;
    group By 1,2 ;
    Order By 1,2;
    INTO Cursor Tamrap1 Readwrite


Kafasını yoran herkese teşekkür

10

Re: Benden bukadar gerisi sizin işiniz

between() lardaki this.parent -- thisform.yerine cursorde olusan tarih araliklarini mecburen kullandim artik o kismida sana ait smile

11

Re: Benden bukadar gerisi sizin işiniz

Çok sağol hocam
Bilmediğim NVL ve Cast komutları var bunun içinde
özelliklede bu satır "0" ne oluyor helpe bulamadım

Visual Fox Pro
Cast(0 As B) As Gentop1

12

Re: Benden bukadar gerisi sizin işiniz

NVL() null value lar icin
nvl(asilama.notes,'') as asilar bos degilse degeri yaz yoksa '' yada '' icindekini

CAST()
Cast(0 As B) As Gentop1 , burada Gentop1 Double bir alan olarak kabul ediliyor default degeri de 0

cast() ayrica sql select zamaninda alan tipi degistirerek sonuc olusturmayada yariyor cast('1' as I) as sirano vs gibi yani Char bir alani Integer e donusturerek cursore aliyorsun

CAST() , ICASE() , NVL() cok faydali functionlar ...

13

Re: Benden bukadar gerisi sizin işiniz

nvl yi hiç duymamıştım oysa çok lazımmış onun yerine hep insert yada replace komutu kullanmak zorunda kalıyordum
bu enfes olmuş

cast ve icast için biraz yoğrulmam lazım anlaşılan.

bu arada birşeydaha sorsam
yukarda oluşan cursoru "tamrap1 "'i biri gride koyduktan sonra gridin headerlarına tıkladığına indexleme yaptırtabilirmiyim.

normal dbf lerde set order la yapıyordum bunu ama cursorlarda indexleme imkanı varmı ?

14

Re: Benden bukadar gerisi sizin işiniz

Visual Fox Pro
INTO Cursor Tamrap1 Readwrite

index yapabilmenin sirri burada yatiyor READWRITE cursorde table gibi oynayabilme sansi taniyor

final cursorunu olusturduktan ve grid1.recordsource="TampRap1" yapmadan once siralatmak istedigin kolonlari

Visual Fox Pro
INDEX ON cinsler TAG cins

INDEX ON asilar TAG asi
INDEX ON mikatar TAG MIK
INDEX ON gentop1 TAG GTOP

seklinde indexlersen

grid1.header1.Click eventa  && cins kolonu olsun mesela

Visual Fox Pro
Thisform.LockScreen = .T.

Local lnRecno
lnRecno = Iif(Eof(Thisform.grid1.RecordSource) Or ;
    BOF(Thisform.grid1.RecordSource),1,Recno(thisform.grid1.RecordSource))
Try
    If Upper(Juststem(This.Picture))="UP" && grid1.header1.picture
        This.Picture = Home(2)+"Solution\toledo\down.bmp"
        Set Order To "cins" Descending
        Thisform.grid1.Refresh()
    Else
        This.Picture = Home(2)+"Solution\Toledo\up.bmp"
        Set Order To "cins" Ascending
        Thisform.grid1.Refresh()
    Endif
Catch
Finally
    Go lnRecno
Endtry
Thisform.LockScreen = .F.

yazabilirsin tabi bu isler icin Class Based cozumler var ama en azindan fikir olmasi acisindan ornekledim.

15

Re: Benden bukadar gerisi sizin işiniz

Ah hocam yanında olsamda elinizi öpebilsem çok sağolun

16

Re: Benden bukadar gerisi sizin işiniz

soykanozcelik [at] hotmail.com MSN olarak ekleyebilirsin