SQL sorgusu ve DBgrid guruplama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

SQL sorgusu ve DBgrid guruplama

Mesaj gönderen kuntay »

Merhaba arkadaşlar benim bir projemde karşılaştığım bir iki problemim var. printer çıktı raporlama bu konuda bu siteden çok bilgi aldım daha öncede çalışan arkadaşlar olmuş.

Kod: Tümünü seç


K.No    Tarih             Saat        durum           ilkSayfa       SonSayfa
10       01.01.2006    12:00       başladı               0                 0
10       01.01.2006    12:01       tamamlandı            2                 3
10       01.01.2006    12:02       Tamamlandı            3                 3  

11       01.01.2006    14:01       başladı               0                 0
11       01.01.2006    14:01       tamamlandı            2                 0
11       01.01.2006    14:01       tamamlandı            2                 2    

12       04.01.2006    13:30        başladı              0                 0
12       04.01.2006    13:31       Tamamlandı            2                 3
12       04.01.2006    13:31       Tamamlandı            2                 5
12       04.01.2006    13:31       Tamamlandı            4                 5
12       04.01.2006    13:31       Tamamlandı            5                 5

1.Sorum yukarda farkettiyseniz tüm veriler bir veri tabanından geliyor
ve dbgrid de listeliyorum K.NO field ım iş kuyruklarını ayıran özellik oluyor burda yani 10 - 11 - 12 nolu 3 adet çıktının kaydı tutuluyor

Soru 1 : DbGridde satır renklendirme koşula bağlı nasıl yapabilirim
10 lu gruplar sarı
11 lu gruplar yeşil
12 li gruplar sarı
.. . .. yeşil
" " " "
Burdaki amacım çıktı işlerinin rahat izlenebilmesi için k.no su aynı olanlar bir renk diğer k.no başka bir renk

Soru 2 :

Kod: Tümünü seç

select Max(sonsayfa) from data groupby k.no 
Yani burda amacım k.no bir grup burda benim toplam sayfa çıktısına ihtiyacım var bunun için her gurubun sonsayfa fieldindaki en büyük rakamı çekip alıyorum sonrada toplam sayfa adedini mesajla göstermeyi hedefliyorum ama ben şu şekilde bir sorguya ihtiyacım var

başlangıç tarihi başlangıç saati
bitiş tarihi bitiş saati
ve sonra her çıktı grubunun toplam sayfa sayısını alıp toplatmak

yani 01.01.2006 ve 10:00 ile 05.01.2006 ve 23:00 arasındaki
her bir çıktı grubunun sonsayfa verisindeki en büyük değeri
aşağıdaki gibi listeletmek.

Kod: Tümünü seç


K.No    Tarih             Saat        durum           ilkSayfa       SonSayfa
10       01.01.2006    12:02       Tamamlandı           3              3  

11       01.01.2006    14:01       tamamlandı           2              2    

12       04.01.2006    13:31       Tamamlandı           5              5

ve showmessage( ' toplam alınan çıktı Sayısı 10 adet')
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

İlk sorun için cevabı arama ile forumda bulabileceğini sanıyorum çünkü daha önce bahsi geçti diye hatırlıyorum.

:ara cxgrid AND renklendirme

İkinci sorun için de k.no ya göre gruplandırıp diğer alanların max. ları ile itediğin sorguyu alabilirsin:

Kod: Tümünü seç

select Max(Tarih),Max(Saat),Max(durum),Max(ilkSayfa),Max(SonSayfa)  from data groupby k.no 
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

ben Dbgrid kullanıyorum ve aramada sutun renklendirme var fakat satır olarak bulamadım.,

bu arada sorguda ben max tarih saat değil önce iki tarih arasını sorgulatıp saatleri ile birlikte tabi sonra gelen sonuçta k.no ya göre max sayfa olarak bi sorgu daha iç içe gibi yani
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
ikut

Mesaj gönderen ikut »

kuntay yazdı:ben Dbgrid kullanıyorum ve aramada sutun renklendirme var fakat satır olarak bulamadım.,

bu arada sorguda ben max tarih saat değil önce iki tarih arasını sorgulatıp saatleri ile birlikte tabi sonra gelen sonuçta k.no ya göre max sayfa olarak bi sorgu daha iç içe gibi yani
ONGETCELL PARAMS TA İSTEDİĞİN ALANA GORE KONTROL EDEBİLİRSİN. DRAWCELL DE OLABİLİR. GRİD E GORE DEĞİŞMEKTE
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

Kod: Tümünü seç

bu arada sorguda ben max tarih saat değil önce iki tarih arasını sorgulatıp saatleri ile birlikte tabi sonra gelen sonuçta k.no gurbuna göre ya göre max sayfa olarak bi sorgu daha iç içe gibi yani
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba renklendirmeyle ilgili küçük bir püften bahsetmek istiyorum ,
sanırım sizin grup grup renklendirmek istediğiniz kno alanı 10,11,12 den ibaret değil bu artacaktır kayıt girildikçe yanlış anlamadıysam.
Bu durumda if kno=12 then benzeri bir yöntemle renklendirme yapmanız mümkün değil önerim şu alabilir kendinize bir renk adedi belirleyin örneğin 4 farklı renk sürekli tekrarlasın bunun için MOD ifadesinden yararlanın örneğin,

Kod: Tümünü seç

case (kno mod 4) of
0: ...clgrenn;
1: ....clRed;
2: .......
3:  .......
end;
taki kno nun bir tam sayı olduğunu varsaydım değilse Round ile tam sayı yaparsınız
gibi kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

Evet kno bir gurup numarasını belirtiyor yani
kno = 1 se kaç satır varsa o çıktının işlemleri yani dediğiniz gibi benim k.no grubuna göre renklendirme yapmam gerekiyor

aramada şöyle bir şey buldum

Kod: Tümünü seç

DrawColumnCell 
if DbGrid3.DataSource.DataSet.FieldByName('print').Value = 't' then 
begin // irsaliye yazdırılmış ise skyblue renkte 
DbGrid3.Canvas.Font.Color := clNavy; 
DbGrid3.Canvas.Brush.Color := clSkyBlue; 
DbGrid3.Canvas.FillRect(Rect); 
DbGrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
end; 
burda ben bu kodu kendime göre nasıl şekillendirebilecem

2. sorum tekrarlamak istiyorum
tablomdan iki tarih ve saat aralığını çekmek gelen verillerden de grubu kontrol edip (grup kno) her guruptan sonsayfa değeri en büyük olanları listelemek istiyorum
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba tam olarak aşağıdaki gibi bir kod işinizi görecektir ilk sorunuzla ilgili,

Kod: Tümünü seç


 case (DbGrid1.DataSource.DataSet.FieldByName('kno').AsInteger MOD 4) of
0: dbgrid1.Canvas.Font.Color := clGreen;
1: dbgrid1.Canvas.Font.Color := clRed;
2: dbgrid1.Canvas.Font.Color := clWhite;
3: dbgrid1.Canvas.Font.Color := clBlack;
end;
dbgrid1.Canvas.FillRect(Rect);
dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

2. sorum tekrarlamak istiyorum
tablomdan iki tarih ve saat aralığını çekmek gelen verillerden de grubu kontrol edip (grup kno) her guruptan sonsayfa değeri en büyük olanları listelemek istiyorum
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Tarih ve saat aralığı derken neyi kastediyorsun? iki tarih arasındaki gün sayısı ve iki saat arasında saat-dakika süresini mi? Senin istediğin sonuçta ma. olanlar dönmüş olduğu için o şekilde yazmıştım ben. Ama eğer gün ce saati bulmak istiyorsan fonksiyon kullanman lazım. bunun için de hangi veritabanını kullandığın önemli çünkü fonksiyonlar değişebiliyor. Mesela ms sql server için DATEPART fonksiyonunu kullanarak tarih ve saat farklarını bulabilirsin.
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

yok kardeş benim istediğim mesela 01.01.2006 saat 07:00 ile 15.01.2006 saat 20:00 arasında alınmış çıktıların raporu ve bu gelen sonuçtanda
kno grubuna göre max(sonsayfa) yani tarihler arası gelen kayıtlar içinde gruba göre her gurubun max sonsayfa olanlarını çekmek istiyorum
grup kno olan kısım.
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Cevapla