döngüler ve sorgularla ilgili
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
döngüler ve sorgularla ilgili
merhaba arkadaşlar programımda cariharaket query sinin after post olayında girilen haraket doktor hesabı ve kasa ya gidiyori, gittiği anda da yine cariharaketin afterpost olayında bunların toplamlarını repeat until döngüsüyle alıyorum acaba kasa da ve doktor hesabında kayıtlar çoğalınca ,cariharakete kayıt yaparken bir problem oluşurmu ve çok yavaşlarmı, şuanda problemsiz ama kayıtlar çoğalınca yavaşlama veya prob. çıkma ihtimali varmı, bunun başka çözüm yolu varsa onumu denemeliyim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
merhaba ,
Döngü ile toplam aldırmanız tahmin ettiğiniz gibi ileride kayıt sayısı arttığında yavaşlamalara neden olacak bir sistem, madem TQuery kullanıyorsunuz ikinci bir TQuery yardımı ile toplam sonucunu direk DAtabaseden SQL ile alabilirsiniz örneğin Toplam:Double bir değişkenimiz olsun, tablonun adı Doktor olsun toplam alınacak alanın adı da tutar olsun toplamı alacağımız örnek aşağıdaki gibi olamalıdır,
iyi çalışmalar.
Döngü ile toplam aldırmanız tahmin ettiğiniz gibi ileride kayıt sayısı arttığında yavaşlamalara neden olacak bir sistem, madem TQuery kullanıyorsunuz ikinci bir TQuery yardımı ile toplam sonucunu direk DAtabaseden SQL ile alabilirsiniz örneğin Toplam:Double bir değişkenimiz olsun, tablonun adı Doktor olsun toplam alınacak alanın adı da tutar olsun toplamı alacağımız örnek aşağıdaki gibi olamalıdır,
Kod: Tümünü seç
with Query2 do
begin
sql.add('select SUM(tutar) from doktor');
Active:=true;
Toplam:=Fields[0].Ascurrency;
end;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
çok teşekkür ederim peki birden fazla alanı toplamak istersem nasıl yapacağım şu şekilde bir kodu öreneğin
teşekkür ederim bu kodu sql ile nasıl yapacağız bu çok daha karışıyor
Kod: Tümünü seç
g_Nakit:=0;g_Kredi:=0;g_Cek:=0;g_Senet:=0;g_top:=0;c_top:=0;dun_devreden:=0;devredecek_tutar:=0;bakiye:=0;c_nakit:=0;c_cek:=0;c_kredi:=0;c_senet:=0;
data.Kasa.Last;
repeat
if data.Kasa.FieldByName('odemetipi').AsString='Nakit' then g_Nakit:=g_Nakit+data.Kasa.FieldByName('giris').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Kredi Kartı' then g_Kredi:=g_Kredi+data.Kasa.FieldByName('giris').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Çek' then g_Cek:=g_Cek+data.Kasa.FieldByName('giris').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Senet' then g_Senet:=g_Senet+data.Kasa.FieldByName('giris').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Nakit' then c_Nakit:=c_Nakit+data.Kasa.FieldByName('cikis').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Kredi Kartı' then c_Kredi:=c_Kredi+data.Kasa.FieldByName('cikis').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Çek' then c_Cek:=c_Cek+data.Kasa.FieldByName('cikis').AsFloat;
if data.Kasa.FieldByName('odemetipi').AsString='Senet' then c_Senet:=c_Senet+data.Kasa.FieldByName('cikis').AsFloat;
data.Kasa.Prior;
until(data.Kasa.Bof);
data.Kasamaster.Edit;
data.Kasamaster.FieldByName('g_Nakit').AsFloat:=g_Nakit;
data.Kasamaster.FieldByName('g_Cek').AsFloat:=g_Cek;
data.Kasamaster.FieldByName('g_Kredi').AsFloat:=g_kredi;
data.Kasamaster.FieldByName('g_Senet').AsFloat:=g_Senet;
data.kasamaster.FieldByName('giris_top').AsFloat:=g_nakit+g_cek+g_senet+g_kredi;
data.Kasamaster.FieldByName('c_Nakit').AsFloat:=c_Nakit;
data.Kasamaster.FieldByName('c_Cek').AsFloat:=c_Cek;
data.Kasamaster.FieldByName('c_Kredi').AsFloat:=c_kredi;
data.Kasamaster.FieldByName('c_Senet').AsFloat:=c_Senet;
data.kasamaster.FieldByName('cikis_top').AsFloat:=c_nakit+c_cek+c_senet+c_kredi;
data.kasamaster.FieldByName('bakiye').AsFloat:=(data.kasamaster.fieldbyname('g_nakit').AsFloat+data.kasamaster.fieldbyname('dunku_kasa_mev').AsFloat)-data.kasamaster.fieldbyname('c_nakit').AsFloat;
data.kasamaster.FieldByName('devreden_kasa_mev').AsFloat:=data.kasamaster.FieldByName('bakiye').AsFloat;
data.Kasamaster.Edit;
data.Kasamaster.Post;
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
merhaba
bence şu şekilde bir fonksiyon declare edin ve kullanın;
kullanmak içinde;
gibi iyi çalışmalar.
bence şu şekilde bir fonksiyon declare edin ve kullanın;
Kod: Tümünü seç
function Toplam(OdemeTipi:String):Double;
var
qToplam:TQuery;
begin
try
qToplam:=TQuery.Create;
with qToplam do
begin
DatabaseName:='db adı yada yolu';
sql.add('select SUM(tutar) from tablo_adi where odemetipi='+''''+OdemeTipi+'''');
Active:=true;
Result:=Fields[0].AsCurrency;
end;
finally
qToplam.Free;
end;
end;
Kod: Tümünü seç
NakitToplam:=Toplam('Nakit');
CekToplam:=Toplam('Çek');
.
.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
cevaplarınız için teşekkür ederim
koduna örneğin ben tutar,borc alacak, alanlarımın da toplamını almak istiyorum bu kodu
şeklinde mi değiştireceğiz ve son olarak ta döngü bitince başka bi tabloya kayıtların toplamını post ediyorum burda tam olarak bu nasıl olacak,yani ben kasaya giriş yaptıysam kasadaki tüm hesaplama işlemlerini yapmalı çek, senet,kredikartı,nakit toplamları almalı nakit giriş ten nakit çıkışı çıkartıp bakiyeyi bulmalı bunu tam olarak ben sql ile yapamıyorum ve sağolun gönderdiğinizi kodları biraz daha açabilirimisiniz
yapmak istiedeğimi anladınız yukarıda şuan da kasada döngü ile yaptıüğım kod var incelerseniz tam olarak vakıf olabilirsiniz...çok teşekkür ederim ilginiz için...
Kod: Tümünü seç
sql.add('select SUM(tutar) from tablo_adi where odemetipi='+''''+OdemeTipi+'''');
Active:=true;
Result:=Fields[0].AsCurrency;
Kod: Tümünü seç
sql.add('select SUM(tutar,borc,alacak) from tablo_adi where odemetipi='+''''+OdemeTipi+'''');
Active:=true;
Result:=Fields[0].AsCurrency;
şeklinde mi değiştireceğiz ve son olarak ta döngü bitince başka bi tabloya kayıtların toplamını post ediyorum burda tam olarak bu nasıl olacak,yani ben kasaya giriş yaptıysam kasadaki tüm hesaplama işlemlerini yapmalı çek, senet,kredikartı,nakit toplamları almalı nakit giriş ten nakit çıkışı çıkartıp bakiyeyi bulmalı bunu tam olarak ben sql ile yapamıyorum ve sağolun gönderdiğinizi kodları biraz daha açabilirimisiniz
yapmak istiedeğimi anladınız yukarıda şuan da kasada döngü ile yaptıüğım kod var incelerseniz tam olarak vakıf olabilirsiniz...çok teşekkür ederim ilginiz için...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
merhaba
bu fonksiyonun amacı belirtilen alanların toplamını döndürmerk ozaman fonksiyonu şu şekilde düzenlersiniz,
Kullanirkende Bu sefer,
iyi çalışmalar.
bu fonksiyonun amacı belirtilen alanların toplamını döndürmerk ozaman fonksiyonu şu şekilde düzenlersiniz,
Kod: Tümünü seç
function Toplam(ToplanacakAlanAdi , OdemeTipi:String):Double;
var
qToplam:TQuery;
begin
try
qToplam:=TQuery.Create;
with qToplam do
begin
DatabaseName:='db adı yada yolu';
sql.add('select SUM('+ToplanacakAlanAdi+') from tablo_adi where odemetipi='+''''+OdemeTipi+'''');
Active:=true;
Result:=Fields[0].AsCurrency;
end;
finally
qToplam.Free;
end;
end;
Kod: Tümünü seç
BorcToplam:=Toplam('Borç' , 'Çek');
AlacakToplam:=Toplam('Alacak' ,'Çek');
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
merhaba,
ikinci verdiğim fonksiyondada toplanacak alanı ve odeme tipini parametre olarak geçiyorsunuz dolayısıyla tablonuzda Borc ve alacak adında alanlar olduğu farz edersek ve Nakit Borç ve Nakit Alacaklarını şu şekilde elde edeblilriz
burada fonksiyonun birinci parametresine gönderdiğiniz alan adı toplanır ve sonuç olarak döndürür ben örnek olsun die borç ve alacak dedim siz istediğiniz sayıda çağırabilirsiniz.
ikinci verdiğim fonksiyondada toplanacak alanı ve odeme tipini parametre olarak geçiyorsunuz dolayısıyla tablonuzda Borc ve alacak adında alanlar olduğu farz edersek ve Nakit Borç ve Nakit Alacaklarını şu şekilde elde edeblilriz
Kod: Tümünü seç
AlacakToplam := Toplam('Alacak' , 'Nakit');
BorcToplam := Toplam('Borç' , 'Nakit');
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
a
merhaba abi şu şekilde yapıyorum ama bi problem var
bu kod çalışıyor ama buna bi kriter eklediğimde not floaatin point gibi hata veriyor o kod da şu;
data.sum_kasa.Close;
data.sum_kasa.SQL.Clear;
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Nakit'+#39+'');
data.sum_kasa.Open;
data.Kasamaster.Edit;
data.Kasamaster.FieldByName('g_Nakit').AsFloat:=strtofloat(sum_kasa.fields[0].asstring);
data.Kasamaster.FieldByName('c_Nakit').AsFloat:=strtofloat(sum_kasa.fields[1].asstring);
data.Kasamaster.Edit;
data.Kasamaster.Post;
bu kod da not flaotin point hatası veriyor
ikinci bişey daha var
burda nakit toplam yaptım cek,kredi kartı ve senette var
bunları şöyle mi yapcaz
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Kredi Kartı'+#39+'');
şeklinde ekleyip demi olacak eğer 4 tane kullanırsak şöle olacak
ozaman çağrırken
data.Kasamaster.Edit;
data.Kasamaster.Post;
bölümne
strtofloat(sum_kasa.fields[1].asstring);
fields[1] yazamayız burya ne yazacağız
İnşaallah anlatabilmişimdir.. sağolun Allah Razı olsun
Kod: Tümünü seç
ibquery1.Close;
ibquery1.SQL.Clear;
ibquery1.SQL.Add('select SUM(giris),SUM(cikis) from hesap_detay where kno=:kno');
ibquery1.Open;
data.fatura_kurumu.Edit;
data.fatura_kurumu.FieldByName('giris_top').AsFloat:=strtofloat(ibquery1.fields[0].asstring);
data.fatura_kurumu.FieldByName('cikis_top').AsFloat:=strtofloat(ibquery1.fields[1].asstring);
data.fatura_kurumu.FieldByName('bakiye').AsFloat:=strtofloat(ibquery1.fields[0].asstring)-strtofloat(ibquery1.fields[1].asstring);
data.fatura_kurumu.Post;
data.sum_kasa.Close;
data.sum_kasa.SQL.Clear;
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Nakit'+#39+'');
data.sum_kasa.Open;
data.Kasamaster.Edit;
data.Kasamaster.FieldByName('g_Nakit').AsFloat:=strtofloat(sum_kasa.fields[0].asstring);
data.Kasamaster.FieldByName('c_Nakit').AsFloat:=strtofloat(sum_kasa.fields[1].asstring);
data.Kasamaster.Edit;
data.Kasamaster.Post;
bu kod da not flaotin point hatası veriyor
ikinci bişey daha var
burda nakit toplam yaptım cek,kredi kartı ve senette var
bunları şöyle mi yapcaz
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Kredi Kartı'+#39+'');
şeklinde ekleyip demi olacak eğer 4 tane kullanırsak şöle olacak
Kod: Tümünü seç
data.sum_kasa.Close;
data.sum_kasa.SQL.Clear;
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Nakit'+#39+'');
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Kredi Kartı'+#39+'');
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Senet'+#39+'');
data.sum_kasa.SQL.Add('select SUM(giris),SUM(cikis) from kasa where id=:id and odemetipi='+#39+'Çek'+#39+'');
data.sum_kasa.Open;
Kod: Tümünü seç
data.Kasamaster.Edit;
data.Kasamaster.FieldByName('g_Nakit').AsFloat:=strtofloat(sum_kasa.fields[0].asstring);
data.Kasamaster.FieldByName('c_Nakit').AsFloat:=strtofloat(sum_kasa.fields[1].asstring);
data.Kasamaster.Edit;
data.Kasamaster.Post;
bölümne
strtofloat(sum_kasa.fields[1].asstring);
fields[1] yazamayız burya ne yazacağız
İnşaallah anlatabilmişimdir.. sağolun Allah Razı olsun
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın