interbase de sum komutu

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
metin26008
Üye
Mesajlar: 4
Kayıt: 17 Tem 2004 04:41

interbase de sum komutu

Mesaj gönderen metin26008 »

s.A.

Kod: Tümünü seç

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select sum(BORC) from IBDENEME');
IBQuery1.SQL.Add('group by MUSTERI');
IBQuery1.Open;
veritabanım interbase6(access ile de denedim),


tablo adı: IBDENEME

veritabanımda bulunan sütunlar şöyle:

Kod: Tümünü seç

MUSTERI string,
YETKILI string,
BORC numeric,


şu sum komutunu bir türlü çalıştıramadım.
forumdan aratıp sonuçlara baktım ama sorunumu çözemedim

yukarıdaki kodları yazıp programı çalıştırdığımda

Kod: Tümünü seç

IBQuery1:Field'MUSTERI' not found
diye muhteşem bir hata mesajı alıyorum
kodlardan "group by" ın olduğu satırı sildiğimde yine aynı hatayı alıyorum

yardım edebilirseniz sevinirim. Allah (c.c.) razı olsun.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Kural olarak Select ifadesi içinde kullandığınız alanları Group By ifadesi nde kullanabilirsiniz.
Yani ifadeniz şu şekilde olmalı:

Kod: Tümünü seç

select sum(BORC),MUSTERI from IBDENEME
group by MUSTERI
Bu düzeltmeden sonra kodunuz çalışmıyorsa, verdiği hatadan da anlaşılabileceği gibi IBQuery iniz 'MUSTERI' alanını bulamıyor. Bunun sebebide şu olabilir:
Eğer IBQuery i oluşturduktan sonra veri tabanı tarafında yeni bir alan eklemişseniz IBQuery niz bu yeni eklenen alanı göremeyebiliyor. Bunun için mevcutu silip yeni bir IBQuery oluşturmanız gerekebilir..

Ayrıca bu sql ifadesini her hangi bir sql editörde çalıştırıp geri dönen sonuca bakmak gerekebilir..

Kolay gelsin ...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

hata mesajı MUSTERI diye bir alan yok diyor... muhtemelen yoktur o zaman :) . Yani kucuk buyuk harf ayrımına dikkat edin....
Bir de oguz arkadasimizin dedigi gibi SQL cümlenizi IBExpert, SQLExplorer vs... bir araç üzerinden çalıştırırsanız daha interactive olarak problemleri yakalama ve ayıklama sansız olur. Delphi kodu ile bunu yapmaya calisinca acaba hatalı olan SQL cümlesi mi yoksa dogru cümleyi delphi icinde mi yanlıs kullanıyorsunuz bunu ayormak zorlasır ve problemi lokliaze etmekten uzaklaşırsınız....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
metin26008
Üye
Mesajlar: 4
Kayıt: 17 Tem 2004 04:41

Mesaj gönderen metin26008 »

teşekkür ederim.
deneyip sonucu yazacağım.
metin26008
Üye
Mesajlar: 4
Kayıt: 17 Tem 2004 04:41

Mesaj gönderen metin26008 »

S.A.

abilerim dedikleriniz aynen uyguladım. hala aynı hatayı veriyor. bu kodları IBExpert'in InteractiveSQL ortamında denedim, orada çalıştı. fakat delphi ortamında access, IB, DBase gibi veritabanlarını kullanarak yaptığım denemelerde hep aynı hatayı alıyorum.

denemek için access'ta

Kimlik : İnteger
ADSOYAD : String
UCRET : integer

başlıklarını içeren bir veritabanı daha hazırladım. programda sum komutunu çalıştır diye komut verdiğimde "kimlik" alanını bulamadım diyor

Kod: Tümünü seç

ADQuery1:Field 'Kimlik' not found
mesajını alıyorum yine. buna karşılık Kimlik alanına göre artan ve azalan sıralama yaptığımda, bu işlemi gerçekleştirior

Kod: Tümünü seç

Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add('Select * From Tablo1');
Adoquery1.SQL.Add('ORDER BY Kimlik ASC');
Adoquery1.Open;
çözemediğim olayda bu zaten: aynı tablo üzerinde "kimlik" alanına göre sıralama yaptırdığımda, "kimlik" alanını görüyor ve sıralamayı yapıyor. Filtreleme komutunu falan çalıştırıyor. ama sum, max, min gibi komutlar çalışmıyor.
sıralarken gördüğü "kimlik" alanını sum komutunu verince görmüyorum diyor.
sanki bu kodların delphi'de yazılışında bir sorun var gibi geliyor, çünkü IBExpert'te çalıştı.

ne yapmam gerekiyor, çözemedim.
metin26008
Üye
Mesajlar: 4
Kayıt: 17 Tem 2004 04:41

Mesaj gönderen metin26008 »

çok şükür sonunda çözebildim

bağlantıyı sağladığımız Query veya Table neyi kullanıyorsak işte, onun datafield'ini temizlememiz gerekiyormuş.
yani kodlar şu şekilde oluyor.

Kod: Tümünü seç

with adouery1 do
 begin
  Close; 
  SQL.Clear; 
  Fields.Clear;
  SQL.Add('select sum(BORC) as TOPLAM from IBDENEME'); 
  Open;
 end;
ilgilendiğiniz için teşekkür ederim. Kolay gelsin.
Cevapla