DBControlGrid

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bugrakorkmaz
Üye
Mesajlar: 4
Kayıt: 07 Oca 2009 10:45

DBControlGrid

Mesaj gönderen bugrakorkmaz »

Merhaba arkadaşlar,
Basit bir uygulama ile uğraşmaktayım.
Siz değerli arkadaşlara sorum şu olucak;

Formumun üzerinde 2 adet DbControlGrid ve Control Gridler üzerinde 1 er adet DbText mevcut.Her db componenti Bir datasource ile SQL serverım uzerındeki Urun tabloma baglı.

Amacım şu:
Ürün tablomda 30 tane kayıt var.30 adet urunun kodları var.Ben 1.Dbcontrol giridimin ilk 10 tanesini, 2.DbControlGridimin 11.kayıttan 20.kayıta kadar olanını gostermesını ıstıyorum.Bu konu uzerınde arastırma yaptım ama bır sonuca ulasamadım.
Siz arkadasların değerlı yardımlarını beklıyorum.
Formun gorunumu bu sekılde;
Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: DBControlGrid

Mesaj gönderen conari »

çektiğiniz dataya Rownumber ile sıra numarası ekleyin ve buna göre filtreleyin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
bugrakorkmaz
Üye
Mesajlar: 4
Kayıt: 07 Oca 2009 10:45

Re: DBControlGrid

Mesaj gönderen bugrakorkmaz »

conari yazdı:çektiğiniz dataya Rownumber ile sıra numarası ekleyin ve buna göre filtreleyin.
Konu hakkında biraz daha detay vermeniz mümkünse çok sevinirim.Dabase'imde zaten urunlerin sıra numaraları var.Her yenı kayıtta otomatik artan sıra numarası alanı mevcut.Fakat filtrelemeyi nasıl yapabilirim?Örneğin 1.kayıttan 10.kayıta kadar olanı al nasıl derim ve bunu dbcontrolgrid'e nasıl dökerim.Ote yandan 11.kayıttan(sıra numarası ) 20.kayıta kadar olanı al ve dbcontrol grid 2 ye dok nasıl derim?
Ilgınıze Teşekkürler.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Re: DBControlGrid

Mesaj gönderen deltas »

kullandığınzı veritabanı
firebird ise

Kod: Tümünü seç

select first 10 skip 0 * from tabloismi
select first 10 skip 11 * from tabloismi
mysql ise

Kod: Tümünü seç

 SELECT * FROM tabloadı LIMIT 10, 20
mssql ise

Kod: Tümünü seç

SELECT TOP 10 * FROM tabloadı 
bu şekilde sorgu çekip, dbgride alabilirsiniz.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
bugrakorkmaz
Üye
Mesajlar: 4
Kayıt: 07 Oca 2009 10:45

Re: DBControlGrid

Mesaj gönderen bugrakorkmaz »

deltas yazdı:kullandığınzı veritabanı
firebird ise

Kod: Tümünü seç

select first 10 skip 0 * from tabloismi
select first 10 skip 11 * from tabloismi
mysql ise

Kod: Tümünü seç

 SELECT * FROM tabloadı LIMIT 10, 20
mssql ise

Kod: Tümünü seç

SELECT TOP 10 * FROM tabloadı 
bu şekilde sorgu çekip, dbgride alabilirsiniz.
MsSql ile top 10 ile ilk 10 kayıt alabilinmekte ancak 10.kayıt ile 20.kayıt arasını nasıl çekebiliriz?Ote yandan kullandıgım grid,
DbControlGrid.
Bilgi verirseniz sevinirim.
Teşekkürler
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Re: DBControlGrid

Mesaj gönderen deltas »

mssql de limit işlemi sıkıntılı bir işlem.

Kod: Tümünü seç

select top 10 * from tabloadi 
select top 10 * from tabloadi where id not in (select top 10 from tabloadi)
burada id olarak primary alan olmalı. Siz tablonuza hangi alana bu özelliği vermişseniz onu yazacaksınız. 2 defa için bu şekilde çalışır diye düşünüyorum. denemedim.

dbctrlgrid'de nasıl kullanacağın konusunda bişey diyemiyecem. O bileşeni daha önce hiç kullanmadım.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: DBControlGrid

Mesaj gönderen conari »

Ben de gridi kullanmadım ama SQL açısından şöle ki
ID ler de aralarda silinme olurse boşluklar doldurulmayacağı için
ROW NUMBER ile sıra numarası atıyoruz

Kod: Tümünü seç

select *, ROW_NUMBER() OVER(ORDER BY ID ASC) as SIRAM from tablo 
where SIRAM <=10
order by ID ASC

Kod: Tümünü seç

select *, ROW_NUMBER() OVER(ORDER BY ID ASC) as SIRAM from tablo 
where SIRAM between 11 and 20
order by ID ASC

Kod: Tümünü seç

select *, ROW_NUMBER() OVER(ORDER BY ID ASC) as SIRAM from tablo 
where SIRAM between 21 and 30
order by ID ASC
Denemedim syntax hatası olabilir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Re: DBControlGrid

Mesaj gönderen deltas »

bence siz en iyisi dbctrlgrid yerine 20 tane panel kullanın. Bu panellerin caption özelliğini ise select işlemi sonucunda dönen değerleri companent özelliği ile belirleyip yazdırabilirsiniz. Ben IbQuery ile yaptım. Adoquery'de aynıdır. kodlar bende sorunsuz çalışıyor. Sizde de sorunsuz çalışır ama x:=i-9 olan yeri değiştirmeniz lazım

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
var
MusteriPaneli: array [0..255] of string;
j,Top : Integer;
s : String;
begin
//Burada ilgili tablodan panel üzerinde görünecek alanı ilgili fielde göre sorguluyorum..
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select DEV_ADI from DEV_KURUM order by Dev_adi');
IBQuery1.Open;

x:=0;
//Burada dönen sorgu sonucunu bir arraya atıyorum.
while not ibquery1.eof do begin
musteripaneli[x]:= ibquery1.FieldByName('dev_adi').AsString;
x:=x+1;
ibquery1.Next;
end;

// burada kodları yazdırmadan 20 tane panel yerleştirin ve konumlandırın
//sonra formda olan toplam componentlerin sayısını bulup
// bu bileşenlerden panel olanların caption özelliğine musteripanael [x] değerini atıyorum.
for i:=0 to ComponentCount-1 do Begin
  x:=i-9 ; // 9 çıkarmamın nedeni paneller bileşen sıralamasında 9'dan başlıyor. Yani bundan önce 9 farklı bileşen var (buton dbgrid gibi)
    if Components[i] is Tpanel Then Begin
    tpanel(components[i]).caption:=musteripaneli[x]
    End;
  End;
end;
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Cevapla