SQL SUM TOPLAM ALMAK

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
OZAY
Üye
Mesajlar: 20
Kayıt: 22 Eyl 2014 09:52

SQL SUM TOPLAM ALMAK

Mesaj gönderen OZAY » 12 May 2015 11:29

Merhaba arakadaşlar
query de alacak isimli alanı sql de sum komutu ile toplatıp edit içerisine yazdırmak istiyorum ama
sürekli hata alıyorum yazdığım kod aşağıdaki gibi nerde hata yapıyorum acaba

Kod: Tümünü seç

query1.close;
query1.sql.Add('SELECT SUM(ALACAK) AS TOPLAM FROM banka');
query1.open;
edit1.text:=inttostr(query1.FieldByName('TOPLAM').AsInteger);
query kontrolünü yeni kullanmaya başladım
yardımcı olabilirmisiniz şimdiden teşekkürler

Kullanıcı avatarı
tuna
Üye
Mesajlar: 286
Kayıt: 07 Tem 2008 03:39
Konum: İstanbul

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen tuna » 12 May 2015 11:44

Merhaba sorgunu şu şekilde denermisin.

Kod: Tümünü seç

query1.close;
query1.sql.text:='SELECT SUM(ALACAK) AS TOPLAM FROM banka';
query1.open;
edit1.text:=inttostr(query1.FieldByName('TOPLAM').AsInteger);
Yine hata verirse hata kodunuda yazarsan daha çabuk yardım edebiliriz.
Kolay gelsin.

Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 542
Kayıt: 11 Haz 2003 05:49
Konum: Adana
İletişim:

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen m_ekici » 12 May 2015 11:48

Bunu Denermisin

Kod: Tümünü seç

edit1.text:=FormatFloat('#,##0.0', query1.FieldValues['TOPLAM']);
bunda da hatayı iki şekilde verir. Gelen değer NULL olabilir. (ISNULL(TOPLAM,0) AS TOPLAM ile düzeltebilirsin.) Diğeri de bilgisayarın kuruş ve binlik ayıracı ile SQL inki farklı olabilir. (aldığın hatayı da yazarsan daha faydalı oluruz)

Kolay gelsin

OZAY
Üye
Mesajlar: 20
Kayıt: 22 Eyl 2014 09:52

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen OZAY » 12 May 2015 12:54

query1:Field 'SNO' not found hatasını veriyor sno databasein ilk sütunu

Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 2978
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen sabanakman » 12 May 2015 01:42

Aldığınız hatanın sebebi, sorgunun çalıştığı DataSet nesnesinin alanları ile sorgu sonucundan çıkan alanların farklı olmasından kaynaklanmaktadır. Sorguyu başka bir Query bileşeni kullanarak çalıştırın veya Fields Editor de ekli olan alanları çıkararak deneyebilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

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

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen freeman35 » 13 May 2015 11:26

yaptım oldu yerine yazdığınız kodun ne iş yaptığını, asıl yapmak istediğinizi, en önemlisi ise kullandığınız class ların çalışmasını ve kodlarını iyice öğrenmeniz lazım.
şöyleki:
query1.sql.Add('SELECT SUM(ALACAK) AS TOPLAM FROM banka');
1-)add() var olan stringlist e satırı ekler.
2-) " AS TOPLAM" zaten sum olan bir sql sonucunu edit edemezsin ayrıca adını değiştirmek yersiz. TField da display labelda bunu yaparsın

edit1.text:=inttostr(query1.FieldByName('TOPLAM').AsInteger);
edit1 e neden alıyorsun ? bu değer değiştirilecek mi? sadece göserilecek mi?
-)Eğer sadece gösterilecekse, neden dbtext yada dblabel (delphideki class adını hatırlamıyorum) e bağlamıyorsun? atama vs bir şeye gerek kalmaz
-)Eğer illaki TEdit te kullanacaksan, neden taklalar attırıp değiştirmeye uğraşıyorsun ? yani TField classın da .Asstring; i kullanırsan sana kızmaz, senin yerine çevirme işini yapar. Formatlı olarak istiyorsada, Objectinspecter dan verdiğin Display format a uygun olarak, Tfield ın displayText functionından çevirme vs kullanmadan değeri alırsın.
Sadece TField class ının 2-3 function ını öğrenmek nekadar işe yarıyor.
Ayrıca, ilk mesajında hata veriyor demişsinde ne olduğunu yazmazsan, biz nerden bilelim ne olduğunu !!! derdin " 1-)add()" ile olan yazdığım satırla alakalıdır.
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 !!!

OZAY
Üye
Mesajlar: 20
Kayıt: 22 Eyl 2014 09:52

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen OZAY » 13 May 2015 12:22

Ben zaten sql öğrenmeye çalışıyorum bugüne kadar hep database ve table çalıştım şimdi query kullanmaya başladım sql komutlarını öğrenmek amacım yaptığım programda sql ile tüm komutlar çalışıyor sadece sum komutunu çalıştıramadım sonuç edite göstermek toplamı görmek için edit yerine label olur dblabel olur tüm örnekleri inceledim ama sum komutunu yapamadım ya bilmediğim bi ayarı var query nin yapmak istediğim database de integer olan sütünün alt toplamlarını almak bunun için bulduğum örnekler çalıştıramıyorum sizin verebileceğiniz bir örnek varmı acaba şimdiden teşekkürler

Kullanıcı avatarı
esistem
Üye
Mesajlar: 462
Kayıt: 02 Eki 2007 10:22
İletişim:

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen esistem » 13 May 2015 03:56

Kod: Tümünü seç

query1.close;
query1.sql.Add('SELECT SUM(ALACAK) AS TOPLAM FROM banka');
query1.open;
edit1.text:=inttostr(query1.FieldByName('TOPLAM').AsInteger);
Selam OZAY,
öncelikle ALACAK, BORC gibi alanlar integer tanımlanmaz (tanımlanmamalı). Float tanımlama yapınız zira kuruşlu tutarları alamazsınız.

Yazdığın SUM kodu doğru, fakat query1.sql.add şeklinde yazman yanlış. Şu şekilde yazmalısın.

Kod: Tümünü seç

query1.close;
query1.sql.Clear; // önce query içersinde var olan kodu silmelisin.
query1.sql.Add('SELECT SUM(ALACAK) AS TOPLAM FROM banka'); // sonra ekleme yapmalısın
query1.open; // tabloyu açtık doğrudur.
edit1.text:=inttostr(query1.FieldByName('TOPLAM').AsInteger); // inntostr aslında doğru fakat daha önce dediğim gibi FLOAT alan tanımlarsan hiç problem yaşamazsın. 
//Eğer FLOAT alan tanımlamışsan
edit1.text:=FormatFloat('#,##0.#0',Query1.FieldByName('TOPLAM').AsFloat); // şeklinde yapabilirsiniz.
//veya
edit1.text:=FloatToStr(Query1.FieldByName('TOPLAM').AsFloat); // şeklinde yapabilirsiniz.


izmirlikemal
Üye
Mesajlar: 110
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen izmirlikemal » 17 Ara 2017 12:12

Sayın sabanakman arkadaşımın yanıtına soruyla cevap veriyorum;
Aynı problem bende de oluyor.
Field ' ID_No' not found (*)
hatası veriyor.
Sizin arkadaşa verdiğiniz yanıtda olduğu gibi 'DataSet nesnesinin alanları ile sorgu sonucundan çıkan alanların farklı olmasından kaynaklanmaktadır' şeklinde değil, zaten aldığım alan isimleri adoquery den aldığım alan isimleri. Ayrıca SUM koduyla toplam almak isterken yine sizi yazdığınız gibi
'Fields Editor de ekli olan alanları çıkararak deneyebilirsiniz' kullanmayacağım alanları tek tek çıkarmama rağmen sürekli Fields Editor'ün ilk sırasındaki
alanın olmadığı mesajını veriyor.
Hata hep ilk alan adı ile geliyor.(*) işaretli hata kodunda 'ID_NO' yok hatası verdiğinde hesaplanabilecek (Float) alan adını değiştirdiğimde bile ilk satırdaki alan adı hatalı diyor.
Arkadaşlarım lütfen yardımcı olunuz.

ertank
Üye
Mesajlar: 965
Kayıt: 11 Eyl 2015 11:45

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen ertank » 17 Ara 2017 10:12

Merhaba,

Fields Editor içeriğini *komple* boşalttığınız halde hata alıyor iseniz kaynak kodunuzun ilgili kısımlarını ve SQL komutunu paylaşmanızı rica ediyorum. Eğer SQL komutu çalışma zamanında oluşturuluyor ise kaynak kod içinden SQL komutu oluşturduğunuz kısımları da paylaşmanızı rica ediyorum. Hatanın hangi satırda olduğunu da belirtirseniz sorunu anlamak adına yardımcı olabilir.

Kullanıcı avatarı
tuna
Üye
Mesajlar: 286
Kayıt: 07 Tem 2008 03:39
Konum: İstanbul

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen tuna » 17 Ara 2017 12:44

query1.open komutundan önce aşağıdaki satırı ekleyin sonra open yapın. Sorununuz çözülecektir.

query1.CursorType:=ctKeyset;

ayrıca varsa query1 nesnesine bağlı dataset nesnesinin bağlantısınıda kesmeniz gerekmektedir.

bu ayarı isterseniz object inspector penceresinden de ayarlayabilirsiniz. Kolay gelsin.

izmirlikemal
Üye
Mesajlar: 110
Kayıt: 10 Oca 2014 01:08
Konum: izmir/Buca

Re: SQL SUM TOPLAM ALMAK

Mesaj gönderen izmirlikemal » 19 Ara 2017 04:09

Arkadaşlar ben sorunumu ertank arkadaşımızın verdiği değerli bilgileri sayesinde çözdüm. Konu ile ilgili arkadaşlarımın viewtopic.php?f=2&t=37103&p=199762#p199762 linkine uğramalarını öneririm.
ertank arkadaşıma teşekkür ederim.

Cevapla