DBGrid de Sütün Toplatma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

DBGrid de Sütün Toplatma

Mesaj gönderen ozcank »

Arkadaşlar şöyle bir sorunum var yardımcı olabilir misiniz? "Sorgu zaman aşım süresi" doldu diyor kod şu şekilde ;

Kod: Tümünü seç

procedure TForm12.BitBtn3Click(Sender: TObject);
begin
NRapor1H.Close;
NRapor1H.SQL.Clear;
NRapor1H.SQL.Add('SELECT Sum(BRUTTUTAR) as BRUT_TUTAR,Sum(SAT_ISKT) as SATIR_ISK_TOP,'+
             'Sum(GEN_ISK1T+GEN_ISK2T+GEN_ISK3T) AS GENEL_ISK_TOP,'+
  	     'sum( CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END ) AS KDV_1,'+
	     'sum( CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV_8,'+
	     'sum( CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV_18,'+
             'Sum(GENELTOPLAM) as GENELTOPLAM FROM TBLFATUIRS,TBLSTHAR WHERE FTIRSIP=''1'' AND Tarih between :pTarih1 and :pTarih2 ');
//         'INNER JOIN TBLSTHAR ON (TBLFATUIRS.CARI_KODU = TBLSTHAR.STHAR_ACIKLAMA AND TBLFATUIRS.FATIRS_NO = TBLSTHAR.FISNO),'+
//         'INNER JOIN TBLCASABIT ON (TBLCASABIT.CARI_KOD = TBLFATUIRS.CARI_KODU)';
NRapor1H.Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
NRapor1H.Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
NRapor1H.Open;
Edit1.Text:=NRapor1H.Fields[0].AsString;
end;
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: DBGrid de Sütün Toplatma

Mesaj gönderen cmkare »

Standart dbgridmi kullanıyorsun yoksa başka bir componentmi?
NRapor1H.commandtimeout süresini uzatıp tekrar bir denermisin?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: DBGrid de Sütün Toplatma

Mesaj gönderen mrmarman »

- Tabloların Indexlerini yapılandırın eksik ise ekleyin.

- Özellikle bu SUM ve CASE'de kullandığınız başlıkların sıralama yönüne bağlı yeniden tanımlama yapınız.

- İşlem hızlanacak dolayısı ile timeout süresinden önce sonuç alacaksınız. :idea:
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid de Sütün Toplatma

Mesaj gönderen ozcank »

Herkesin Miraç Kandilini Kutluyorum Allah hayırlara vesile etsin .

Sorguyu şu şekilde değiştirdim ve "Sorgu zaman aşımı süresi doldu" sorununu aştım fakat şimdi istediğim sonuçları alamıyorum yanlış sonuç veriyor acaba nerde hata yaptım bakabilir misiniz?

Kod: Tümünü seç

NRapor1H.Close;
NRapor1H.SQL.Clear;
NRapor1H.SQL.Text:='SELECT Sum(BRUTTUTAR) AS BRUT_TUTAR, Sum(SAT_ISKT) AS SATIR_ISK_TOP,'+
                   'Sum(GEN_ISK1T+GEN_ISK2T+GEN_ISK3T) AS GENEL_ISK_TOP,  Sum(GENELTOPLAM) as GENELTOPLAM,'+
                   'sum(CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END ) AS KDV_1, '+
                   'Sum(CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV_8, ' +
                   'Sum(CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV_18 ' +
                   'FROM TBLFATUIRS,TBLSTHAR WHERE FTIRSIP=''1'' AND Tarih between :pTarih1 and :pTarih2';
NRapor1H.Parameters.ParamByName('pTarih1').Value := DateTimePicker1.Date;
NRapor1H.Parameters.ParamByName('pTarih2').Value := DateTimePicker2.Date;
NRapor1H.Open;

Edit1.Text:=NRapor1H.FieldByName('KDV_1').AsString;
Edit2.Text:=NRapor1H.FieldByName('KDV_8').AsString;
Edit3.Text:=NRapor1H.FieldByName('KDV_18').AsString;
Edit4.Text:=NRapor1H.FieldByName('BRUT_TUTAR').AsString;
Edit5.Text:=NRapor1H.FieldByName('SATIR_ISK_TOP').AsString;
Edit6.Text:=NRapor1H.FieldByName('GENEL_ISK_TOP').AsString;
Edit7.Text:=NRapor1H.FieldByName('GENELTOPLAM').AsString;
end;


Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: DBGrid de Sütün Toplatma

Mesaj gönderen freeman35 »

Sum(GEN_ISK1T+GEN_ISK2T+GEN_ISK3T) böyle kullanmak yerine her birine ayrı ayrı sum() kullan,
Edit6.Text:=FormatFloat( NRapor1H.FieldByName('GEN_ISK1T').AsFloat + NRapor1H.FieldByName('GEN_ISK2T').AsFloat + .....);

sum(CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END ) AS KDV_1, fir kdv diye field ekle ve bu hesaplamayı ister bir trigger la ister delphi tarafında bir kez hesaplattırım table a ekle, sonra sadece sum al.
field ların null olmasın, ve sum alacağın alanlarada index ver
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: DBGrid de Sütün Toplatma

Mesaj gönderen ozcank »

Arkadaşlar;
Ben kodu şu şekilde yaptığımda doğru sonucu alıyorum fakat satış olarak tabloda "J" tutuluyor ve benim "J" leri süzdürmem gerekiyor STHAR_HTUR=''J'' eklediğimde ise sonuç ilk listelenin toplamını veriyor

Kod: Tümünü seç

Doğru çalışan ;
NRapor1H.SQL.Text:='SELECT sum(CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END ) AS KDV1 ,' +
                   'Sum(CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV8, ' +
                   'Sum(CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV18 ' +
                   'FROM TBLSTHAR WHERE  STHAR_TARIH between :pTarih1 and :pTarih2';


Yanlış sonucu veren;

Kod: Tümünü seç

NRapor1H.SQL.Text:='SELECT sum(CASE WHEN STHAR_KDV=''1'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END ) AS KDV1 ,' +
                   'Sum(CASE WHEN STHAR_KDV=''8'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV8, ' +
                   'Sum(CASE WHEN STHAR_KDV=''18'' THEN (STHAR_NF*STHAR_KDV*STHAR_GCMIK)/100 ELSE 0 END) AS KDV18 ' +
                   'FROM TBLSTHAR WHERE STHAR_HTUR=''J'' AND STHAR_TARIH between :pTarih1 and :pTarih2';
Cevapla