tablonun aynı alanındaki tüm sayıları birbiri ile çarpma

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
zondernick
Üye
Mesajlar: 19
Kayıt: 11 Oca 2011 11:24

tablonun aynı alanındaki tüm sayıları birbiri ile çarpma

Mesaj gönderen zondernick »

Selamlar.

Firebird ile hazırladığım projede aynı tablonun aynı alanındaki tüm verileri birbiri ile çarpmak istiyorum.

Kod: Tümünü seç

select exp(sum(log(tablo alnı))) from tablo 
Şeklinde bir ifade kullanıyorum ancak udf ile log fonksyonu tanımlamam rağmen tip uyumsuzluğu veriyor.

Daha önce paradoks için şöyle bir kod kullanmıştım ve çalışmıştı.

Kod: Tümünü seç

var
toplamlar:Real; // real sayı
  i:integer;
begin
toplamlar := 1;
qry1.first;
for i:=0 to qry1.RecordCount-1 do
begin
toplamlar:= toplamlar * qry1.fieldbyname('çarpılacakalan').Value;
qry1.next;
end;
qry2.Insert; // Sonucun diğer tabloya yazılması.

qry2.FieldByName('çarpımın_yazılacağı_alan').Value:=toplamlar;
qry2.Post;
Ancak firebirdde bunu 1 olarak görüyor. Firebird stored procedurede bu işlemi nasıl yaparız.
Teşekkürler.
zondernick
Üye
Mesajlar: 19
Kayıt: 11 Oca 2011 11:24

Re: tablonun aynı alanındaki tüm sayıları birbiri ile çarpma

Mesaj gönderen zondernick »

Sorun Ibquery den kaynaklıymış bu bileşeni bir DataSource ve dbgrid e bağlayıp

Kod: Tümünü seç

for i:=0 to qry1.RecordCount-1 do
yerine

Kod: Tümünü seç

for i:=0 to qry1.RecordCount  do
normal öalıştı. Belki birilerinin işine yarar.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: tablonun aynı alanındaki tüm sayıları birbiri ile çarpma

Mesaj gönderen aslangeri »

s.a.
öncelikle çözümünüzü paylaştığınız için teşekkür ederim.
eğer bir tablodaki kayıtlar baştan sona taranacaksa kurulacak döngü
for döngüsünden ziyade while döngüsünü kullanmanız daha iyi olacaktır kanısındayım.

Kod: Tümünü seç

 
tablex.first;
while not tablex.eof do
begin
  .......
  tablex.next;
end;
ib bileşenlerde tabloyu open ettiğiniz zaman tablodaki tüm kayıtlar değil ihtiyacınız kadar olan kayıtlar çekilir. o yüzden tablonun tamamı okunmadan recordcount doğru değeri vermeyecektir. veri tabanından okunan kayıt sayısını verecektir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla