Bir gün süren bir raporu nasıl 1 kaç dk. indirebilirim.

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Bir gün süren bir raporu nasıl 1 kaç dk. indirebilirim.

Mesaj gönderen Asri »

Uzun zamandır delphi ile takılıyorum. İki programım dışında bütün programlar tools amaçlıydı. İki tane paradox database li program yazdım ve son yazdığım program da raporlama ilgi bir problemim var.

Bu açıklamayı yapmamın sebebi sql sorgulardan anlamadığımı belirtmek içindi.

Problemime gelince.

Eczane kesinti adlı bir program yazdım programda firmadb.db personeldb.db ve her ay için ayrı bir dosya var 1.db , 2.db .... 12.db adlı hareket dosyaları.
firmadb.db dosyasının içeriği
Kodu*
Firma*
Vergidairesi
Verginumarasi
Bankaadi
Bankano

personeldb.db dosyasının içeriği
kodu *
adi *

kesintidb.db dosyasının içeriği
Kodu*
Tarih*
Perkod*
Firmakod*
Tutar

* olanlar indexli alanlar

Kesintidb firmadb nin ve personeldb nin detail database i,
hangisinde işlem yapılıyorsa onun detaili olarak db grid e listeletiyorum.

rapor aldığımda şu şekilde yapıyorum. Raporun konusu her bir personelin her bir eczaneden kaç ytl lik fiş aldığını bulmam gerekiyor.

Ben bunu iç içe while .. do döngsüyle yapıyorum ve 400 personel de nerdeyse bir gün sürüyor :)

Kod: Tümünü seç

raporpertb.First;
while not raporpertb.EOF do begin
    .
    .   
    raporfirmatb.First;
    while not raporfirmatb.EOF do begin
      .
      .
       tutari:=0;
       raporkesintitb.First;
       while not raporkesintitb.EOF do begin
          if (raporkesintitbperkod.Text=perkodus) and (raporkesintitbfirmakod.Text=firmakodus) then begin
             tutari := tutari+ raporkesintitbtutar.Value;
          end;
          raporkesintitb.Next;

       end;
     end;
end;

Gördüğünüz gib önce ilk personelin kodunu alıyorum sonra ilk firmanın sonra hareket dosyasından bu ikisine eşit olan kayıtların tutar toplamlarını alıyorum. :) sonrada bunları excel e yazıyorum.

Bunu query1 ile en kısa yoldan nasıl yapabilirim.

En içteki döngü query1 ile yapılabilir (nasıl yapıldığını bilmiyorum ama :)
bu bile işimi görür gibime geliyor en azından yarım güne indiririm :)

bu işlemlerin tamamını bir query1 ile çözmenin bir yolu varmı arkadaşlar.

Database den anlamayan bu arkadaşınıza bir yardım lütfen.

İyi çalışmalar.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Misafir

Mesaj gönderen Misafir »

merhaba.
Keşke paradox kullanmasaydınız ..neyse.

400 personel için while not döngüsü;
ve standart bir sorguya where parametresi olarak personel kodunun verilmesi diye özetlenebilir.

Kod: Tümünü seç


query'nin sql sine;
select * from kesintitablosu where personelno =:Parametre1
(syntax hatası yaparsam affola)

while not PersonelTablosu do
 begin
   Query1.Params[0] := PersonelTablosu['PersonelNo'];
   Query1.Open;
   RaporlamaIslemi;
   PersonelTablosu.Next;
 end;

emin değilim ama bu kısa sürmesi lazım..
Not : fikir verme amaçlı yazdığımı göz önünde bulundurunuz..
kolay gelsin.
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

400 personel ve 400 eczane var olduğunu düşünürsek her bir personelin her bir eczaneden toplam aldığı ilaç miktarını da göz önünde bulundurmak lazım.

Bu gönderdiğiniz kod düzenlenerek kesinti hareket tablosundaki o kişiye yada ilgili firmaya ait toplam tutarı verebilir

Ama hareket dosyasından her bir personelin hangi eczaneden toplam ne kadarlık ilaç aldığını hangi kodlarla sorgulayabiliriz.

Bir personel bir çok eczaneden ilaç almış olabilir.

benim bilgim yetersiz bu sorgu konusunda sanki iç içe döngüler kullanmadan bu rapor alınamaz gibime geliyor.

önce prsonel kodu alınır
sonra firma kodu alınır
sonra hareket tablosundan bunlar ayıklanarak toplanır ve sonuç olarak

personel-1 firma-1 ve toplam harcanan sonucuna ulaşılır.
personel-1 firma-2 ve toplam harcanan
..
..
personel-x firma-x ve toplam harcanan

hareket dosyasından bir personelin kodu ile bütün firmalardan tek tek ne kadarlık ilaç almış diye raporlamam lazım.

umarım anlatabilirmişimdir.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
aliyonca
Üye
Mesajlar: 34
Kayıt: 06 Ara 2004 04:57
Konum: GEBZE/KOCAELİ

Mesaj gönderen aliyonca »

merhaba..

Arkadaşım ben sana yardım etmek istiyordum ama anlattıklarından bişi anlıyamadım. Benim kafam bu gün fazla dağıldı inan dediklerini toparlayamadım :oops:

Neyse biraz daha anlaşılır yazarsan belki cevap verebilirim...

Teşekkürler..

Birde şunu yapmaya çalış : paradoxtan kurtulmanın yollarını bir araştır. Yani verilerini başka VT ye kopyalamanın yollarını araştır. :D
www.DelphiTurkiye.com u Çok Seviyorum :)
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

:)

Zaten başka VT lerle çalışabilecek düzeyde olsam bu soruyu sormazdım :)

Yeterince açıklayıcı yazdığımı sanıyorum. Eğer bu da anlaşılmaz sa bilmediğim bir konuyu farklı nasıl anlatabilirim bilmiyorum. :)

Bu probleme bir çözüm bulunmazsa VT yolculuğumdaki ilk durakta inmeyi düşünüyorum :)


Herkese şimdiden teşekkürler.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Cevapla