DBGrid de kayıtları sayfa sayfa gösterme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DBGrid de kayıtları sayfa sayfa gösterme
Merhaba,
Delphi 10.2.3, Sql Express ve Adoquery kullanıyorum. 20000 Ad stok kartı bulunan bir tablo ile sipariş veya fatura madde kaydı açarken stok seçmek için stok penceresini çağırdığımda yaklaşık 40 sn bekletiyor. Bunun sebebininde kayıtları tek seferde okutup ekrana getirmeye çalışmamdan kaynaklandığını biliyorum. Stok kartlarını çağırdığımda ekrana sayfa sayfa ve filtre ederek getirirsem eğer sorunun çözülebileceğini düşündüm. Fakat düşündüğümü bir türlü uygulayamadım. Adoquery ile ekrandan girilen fitrelere uygun olan kayıtları örneğin ilk 1 ile 1000 arası olanları daha sonra sayfa geçişi butonuna basınca 1001 ile 2000 arası olanları nasıl getirebileceğimi bir türlü bulamadım. Bunun için LIMIT, FIRST - SKIP vb bazı komutlardan bahsedilmiş ama hiçbirini çalıştıramadım.
Hedefim filtrelere uygun olan kayıtları dbgridde sayfa sayfa göstrebilmek, bunu nasıl yapabilirim ? Bu konuda çaresiz kalmış olabileceğimi düşünmüyorum mutlaka bir yolu yöntemi vardır fakat ne yaptıysam çözemedim. Yardımlarınızı rica ediyorum. Teşekkürler.
Bu arada araştırmalarım devam ediyor, Adoquery üzerinde MaxRecords özelliği varmış. Buraya 20 yazınca dbgridde sadece 20 kayıt getiriyor. Bu özelliği kullanabilir miyim ?
Delphi 10.2.3, Sql Express ve Adoquery kullanıyorum. 20000 Ad stok kartı bulunan bir tablo ile sipariş veya fatura madde kaydı açarken stok seçmek için stok penceresini çağırdığımda yaklaşık 40 sn bekletiyor. Bunun sebebininde kayıtları tek seferde okutup ekrana getirmeye çalışmamdan kaynaklandığını biliyorum. Stok kartlarını çağırdığımda ekrana sayfa sayfa ve filtre ederek getirirsem eğer sorunun çözülebileceğini düşündüm. Fakat düşündüğümü bir türlü uygulayamadım. Adoquery ile ekrandan girilen fitrelere uygun olan kayıtları örneğin ilk 1 ile 1000 arası olanları daha sonra sayfa geçişi butonuna basınca 1001 ile 2000 arası olanları nasıl getirebileceğimi bir türlü bulamadım. Bunun için LIMIT, FIRST - SKIP vb bazı komutlardan bahsedilmiş ama hiçbirini çalıştıramadım.
Hedefim filtrelere uygun olan kayıtları dbgridde sayfa sayfa göstrebilmek, bunu nasıl yapabilirim ? Bu konuda çaresiz kalmış olabileceğimi düşünmüyorum mutlaka bir yolu yöntemi vardır fakat ne yaptıysam çözemedim. Yardımlarınızı rica ediyorum. Teşekkürler.
Bu arada araştırmalarım devam ediyor, Adoquery üzerinde MaxRecords özelliği varmış. Buraya 20 yazınca dbgridde sadece 20 kayıt getiriyor. Bu özelliği kullanabilir miyim ?
-
- Üye
- Mesajlar: 121
- Kayıt: 10 Ara 2015 10:39
Re: DBGrid de kayıtları sayfa sayfa gösterme
Merhaba.
Yanılmıyorsam SQL Server için TOP komutuyla dediğiniz işlem yapılabilir.
Örneğin;
Bu şekilde Stok tablosunun ilk 100 kaydını getirmiş olursunuz.
Yanılmıyorsam SQL Server için TOP komutuyla dediğiniz işlem yapılabilir.
Örneğin;
Kod: Tümünü seç
SELECT TOP 100 * FROM STOK
Re: DBGrid de kayıtları sayfa sayfa gösterme
Merhaba,
Evet ama ben sayfa sayfa getirmek istiyorum, kullanıcı "010" ile başlayan stokları getir diye filtre ettiğinde zaten 10000 adet stok "010" ile başlıyor. Sonuç olarak benim kayıtları sayfa sayfa getirmekten başka çarem yok.
Evet ama ben sayfa sayfa getirmek istiyorum, kullanıcı "010" ile başlayan stokları getir diye filtre ettiğinde zaten 10000 adet stok "010" ile başlıyor. Sonuç olarak benim kayıtları sayfa sayfa getirmekten başka çarem yok.
En son mmg tarafından 12 Oca 2019 09:07 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: DBGrid de kayıtları sayfa sayfa gösterme
Veri tabaninda mutlaka otomatik artan index id vardir. Sql serverda tam bilmiyrum ama mysl de ornek bir kod yazabilirim.
Sorgula butonuna asagidaki sql yazilacak.
Select * from stok where kullanici like '020%' limit 25 order by stokid
Sorgula butonuna asagidaki sql yazilacak.
Select * from stok where kullanici like '020%' limit 25 order by stokid
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: DBGrid de kayıtları sayfa sayfa gösterme
Veri tabaninda mutlaka otomatik artan index id vardir. Sql serverda tam bilmiyrum ama mysl de ornek bir kod yazabilirim.
Sorgula butonuna asagidaki sql yazilacak.
Sonraki sayfa butonunun altina yazacagin sql ise
Ne oldugunu anlamissindir sanirim. Her seferinde en fazla 25 kayit liseteliyrsun ve id si her seferinde bir onceki en buyuk id den daha buyuk ilk 25 tanesini listeliyrsun. Ilk 25 tanesini ise order by stokid hallediyor. Listenin id ye gore kucukten buyuge dogru olmasini sagliyor.
Sorgula butonuna asagidaki sql yazilacak.
Kod: Tümünü seç
sql:='Select * from stok where kullanici like '020%' limit 25 order by stokid';
Adoquery.sql.add(sql);
Adoquery.open;
Adoquery.last;
i:=adoquerystokid.asinteger;//listelenmis son kaydin indexi
Kod: Tümünü seç
sql:='select * from stok where kullanici like '020%' and stokid > ' + inttostr(i) + ' order by stokid';
Adoquery.sql.add(sql);
Adoquery.open;
Adoquery.last;
i:=adoquerystokid.asinteger;// i yi tekrar guncelleyelim.
Re: DBGrid de kayıtları sayfa sayfa gösterme
Merhaba,
Öncelikle ilginiz için teşekkür ederim fakat limit komutunu ben çalıştıramıyorum hata alıyorum. Aşağıda hatayı paylaşıyorum. Limit komutunu ben bir türlü çalıştıramıyorum.
First chance exception at $74031812. Exception class EOleException with message '[Microsoft][SQL Server Native Client 11.0][SQL Server]Executing SQL directly; no cursor'. Process sayfalama.exe (9556)
Öncelikle ilginiz için teşekkür ederim fakat limit komutunu ben çalıştıramıyorum hata alıyorum. Aşağıda hatayı paylaşıyorum. Limit komutunu ben bir türlü çalıştıramıyorum.
First chance exception at $74031812. Exception class EOleException with message '[Microsoft][SQL Server Native Client 11.0][SQL Server]Executing SQL directly; no cursor'. Process sayfalama.exe (9556)
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: DBGrid de kayıtları sayfa sayfa gösterme
simdi kontrol ettim. Mssql de limit yok sanırım. onun yerine 2005 ve önceki versiyonlarında top var. MSSQL 2012 kullaniyorsan OFFSET ROWS FETCH kullanman gerekiyor. mssql biraz karışık geldi mysql e göre..
sorgula butonuna
sonraki sayfa butonuna
bende mssql server olmadığı icin deneyemiyorum. bu yüzden biraz atmasyon oldu. deneyebilirmisin bu şekilde..
sorgula butonuna
Kod: Tümünü seç
sql:='Select * from stok where kullanici like '020%' order by stokid OFFSET 25 ROWS
FETCH NEXT 25 ROWS ONLY';
Adoquery.sql.add(sql);
Adoquery.open;
Adoquery.last;
i:=adoquerystokid.asinteger;
Kod: Tümünü seç
sql:='select * from stok where kullanici like '020%' and stokid > ' + inttostr(i) + ' order by stokid OFFSET 25 ROWS
FETCH NEXT 25 ROWS ONLY ';
Adoquery.sql.add(sql);
Adoquery.open;
Adoquery.last;
i:=adoquerystokid.asinteger;//
Re: DBGrid de kayıtları sayfa sayfa gösterme
Merhaba Me_turan,
Göstermiş olduğun yöntemi biraz daha araştırıp geliştirerek sanırım DBGrid'de sayfalama yapmayı başardık. Büyük bir azim ve sabırla yardımcı olduğun için çok teşekkür ediyorum gerçekten. Şu an dikkatimi çeken tek problem sadece ekranda görülen kayıt grubuna dahil olmayan örneğin ekranda 2. sayfa kayıtları var iken ve diyelim ki bu kayıtlar "010" ile başlıyorlar ve ben eğer yeni stok kartı girip kodunu "020" verirsem kaydedip DbGrid'e geri döndüğümde yeni eklenen kaydın üzerine konumlanmıyor.2. sayfada bekliyor. Bu problemide çözersem eğer mükemmel bir sayfalama olmuş olacak diye düşünüyorum. Aşağıda ihtiyacı olan arkadaşlar için kodu paylaşıyorum.
1. Forma SayfaNo ve SatirSayisi değişkenleri ekliyoruz.
2. Bir adet "Listeleme" butonu koyuyoruz. Form Show'da bu buton otomatik çalıştırılıyor.
3. Forma bir adet "Önceki Sayfa" butonu koyuyoruz.
4. Forma bir adet "Sonraki Sayfa" butonu koyuyoruz.
Göstermiş olduğun yöntemi biraz daha araştırıp geliştirerek sanırım DBGrid'de sayfalama yapmayı başardık. Büyük bir azim ve sabırla yardımcı olduğun için çok teşekkür ediyorum gerçekten. Şu an dikkatimi çeken tek problem sadece ekranda görülen kayıt grubuna dahil olmayan örneğin ekranda 2. sayfa kayıtları var iken ve diyelim ki bu kayıtlar "010" ile başlıyorlar ve ben eğer yeni stok kartı girip kodunu "020" verirsem kaydedip DbGrid'e geri döndüğümde yeni eklenen kaydın üzerine konumlanmıyor.2. sayfada bekliyor. Bu problemide çözersem eğer mükemmel bir sayfalama olmuş olacak diye düşünüyorum. Aşağıda ihtiyacı olan arkadaşlar için kodu paylaşıyorum.
1. Forma SayfaNo ve SatirSayisi değişkenleri ekliyoruz.
Kod: Tümünü seç
public
{ Public declarations }
end;
var
Form1: TForm1;
SayfaNo:Integer= 1;
SatirSayisi:Integer= 25;
implementation
uses U_ANAMENU, U_DM1, U_DM2;
2. Bir adet "Listeleme" butonu koyuyoruz. Form Show'da bu buton otomatik çalıştırılıyor.
Kod: Tümünü seç
procedure TFORM1.BtListeleClick(Sender: TObject);
begin
Stoklar.Sql.Add('Select * From Stoklar');
Stoklar.Sql.Add('Where Stok_No Like Upper(:vStok_No) Order By Stok_No');
Stoklar.Sql.Add('Offset :vAtla rows fetch first :vSatirAtla rows only');
Stoklar.Parameters.ParamByName('vStok_No').Value := ARA.Text+'%';
Stoklar.Parameters.ParamByName('vAtla').Value:= ((SayfaNo -1) * SatirSayisi);
Stoklar.Parameters.ParamByName('vSatirAtla').Value:= SatirSayisi;
Stoklar.open;
end;
Kod: Tümünü seç
procedure TFORM1.OncekiSayfaClick(Sender: TObject);
begin
SayfaNo:= SayfaNo -1;
if SayfaNo <= 0 then
SayfaNo:= 1;
BtListele.Click;
end;
Kod: Tümünü seç
procedure TFORM1.SonrakiSayfaClick(Sender: TObject);
begin
SayfaNo:= SayfaNo + 1;
BtListele.Click;
end;