Grid Toplam

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ı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Grid Toplam

Mesaj gönderen serbek_tr »

Hayırlı çalışmalar;

Arkadaşlar Sql Kullanan bir arkadaşım var o şöyle birşey yapıyor

bir sogu listesi ekranında listenin en altında grid içinde ki her alanın toplamını alıyor isterse guruplayarak ara toplam alıyor. nasıl yaptığını çözdüm ancak bu olay firebird de gerçekleşmiyor yanılmıyorsam hep hata aldım diyelimki bir sorgusu

Kod: Tümünü seç

Select Ad, Maas From Tablo
union all
Select ' ', Sum(maas) As Toplam From Tablo
diyebiliyor yani ' ' işaretleri ile aldatmaca bir alan kullanıp işini yapabiliyor ama firebirdde böyle birşey yok ne yapabiliriz.

tabi onun yaptığı bu işleme göre grid de en altta maaş kolonun en altı toplamı veriyor. yukarıdaki code ifadem yanlış olabilir düşünmeden yazdım sadece aldatmacayı görün diye
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
onaydin

Mesaj gönderen onaydin »

Merhaba
Union larda önemli olan husus alan sayılarının ve veritiplerinin aynı olması.
Burda alan sayıları aynı orada bir sorun yok ama diğer veritabanı otomatik olarak sum fonksiyonunun değerini integer verebiliyorken firebird bunu o şekilde vermiyor.
Yapmanız gereken Maas alanının veritipi neyse sum fonksiyonundan dönen değeri de ona çevirmek.
Mesela

Kod: Tümünü seç

Select cast('Toplam' as varchar(20)), cast(sum(maas) as integer) As Toplam From Tablo
gibi. Veritiplerinin tutturusanız çalışacaktır.
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Teşekkür ederim bilgiler için ancak bir sorun daha var ben bunu örnek teşkil etsin diye vermiştim

Kod: Tümünü seç

Select Ad, Maas From Tablo 
union all 
Select ' ', Sum(maas) As Toplam From Tablo
ve asıl olan Sql de alan olmadığı halde tırnak işaretlerini istediğiniz kadar kullanarak sahte alan olarak ifade edebiliyorsunuz firebird de bu yok asıl sormak istediğim buydu

mesela

Kod: Tümünü seç

Select ad, soyad, maas, kesinti, mesai from personel
union all
Select ' ', ' ', Sum(maas) as topmaas, sum(kesinti) as kesinti, ' ' from peronel
şeklinde bir ifade daha doğrusu olmadığı halde alan( ' ' ifadesi) gibi davranılan ifadeler firebirde hata veriyor yani kalkıpta ad alanını toplayacak halim yok işte bunun için aldatamaca kullanılıyor ve sorgu sonucu şöyle oluyor

Kod: Tümünü seç

Ad            Soyad         Maaş         Kesinti         Mesai
--------------------------------------------------------------
xx             xxx            332           17               5
---------------------------------------------------------------
qq             qq              298           0                 3
---------------------------------------------------------------
...              ...               ....           ..                 .. 
---------------------------------------------------------------
...              ...               ....           ..                 ..
---------------------------------------------------------------
                                  630           17 
----------------------------------------------------------------
bu tabloyu grid olarak değerlendirin aynen bu şekilde bir sonuca gidiliyor
grid içinde hatta arkadaş daha fazla ileri gibi karmaşık tablolarda
gurup toplamlar satır toplamları gibisinden şeyler yapmış açıkçası adam resmen quantumgrid misali bir şey yapmış biz neden yapmayalım diyoruz ancak iki tırnak işareti engel oluyor bize
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
onaydin

Mesaj gönderen onaydin »

Bos gececeginiz yerleri
cast(' ' as yukardakidatatipi)
seklinde yazmak lazim.
Detay olarak sunu soyleyeyim sadece ' ' seklinde yazarsaniz fb bu degeri
char(1) olarak algilayacaktir, yukardaki ad alani varchar(20) olarak tanimliysa varchar(20) ile char(1) ayni tur olmadiklarindan hata verecektir.
Bu sebeple alt union daki alanlari cast fonksiyonu ile yukardaki veritipleri ile uyumlu hale getirmeniz gerekmektedir.
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Teşekkür Ederim Deneyeceğim
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Başaramadım yada işe yaramıyor
hata :


fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Data type unknown.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
onaydin

Mesaj gönderen onaydin »

Örnek olsun diye bir tane hazırladım.
uye_no alanı integer, ad ve soyad alanlarıysa varchar(25)

Resim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Developer Express'in Grid'ini (QuantumGrid) kullanırsanız bu istedikleriniz için SQL'de hiç bir şey yapmanıza gerek kalmaz :)

Grid'in kendisine söylüyorsunuz, Bu alanı topla diye istersen kolonların yerini değiştir istersen gruplar oluştur kendisi otomatik toplam alıyor.

İnceleyin, çok beğeneceksiniz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Onaydın Çok Sağol Teşekkür Ederim Örneğini inceledim Bende ufak bir şey yaptım artık geliştiririm kendime göre;

Kuri_TLJ bildiğim kadarı ile onlar ücretli yanılıyormuyum
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Evet Ücretli ama adamlar hakkediyorlar, fazlasını hakkediyorlar. Sadece Gridi alabilirsin eğer istersen :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@onaydin in dediğine ilaveten;

Kod: Tümünü seç

Select Ad, Maas From Tablo
union all
Select ' ', Sum(maas) As Toplam From Tablo
yerine

Kod: Tümünü seç

Select Ad as adi, Maas From Tablo
union all
Select ' ' as adi, Sum(maas) As Toplam From Tablo
şeklinde de deneyebilirsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Kuri_TJL Haklısın adamlar çalışmış yapmış hak etmiş doğru ama şimdilik o kadar lüks bir compenente ihtiyacım yok. ha ücretsiz olsa kullanmazmıyım kullanırım tabi ama şimdilik benim istediklerim sizlerinde yardımı ile compenent olmadan yapılabilecek şeyler bence o yüzden şimdilik kendimiz yapalım ama elbet bir gün kesinkez ihtiyaç meselesi olacak o zaman düşünürüz Teşekkür ettim.

Sayın rsimsek onaydının önerdiği üzere cast ifadesi olmadan olmuyor bu iş denedim yad gözden kaçan birşey varsa bilemem ama umarım firebirdün birdaha sürümünde sql de olduğu gibi bu kolaylık düşünülür
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Torry's Delphi sayfasında muhtemelen free componentler vardır inceleyebilirsini. En azından güzel süslü püslü gridler componentler vardır. Jedi componentlerini de inceleyebilirsin onlarında bir sürü componenti var ve ücretsiz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla