Dinamik bir Sql-dbgrid ilişkisi nasıl olur?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Dinamik bir Sql-dbgrid ilişkisi nasıl olur?
merhaba
geçen gün bir programdan gördüm, büyük bir rapor hazırlanırken, saniyeler geçtikçe kayıtlar dbgride yazılıyordu. Ama benim kullandığım dbgrid ve ibqueryde sorgu tamamen bitince sorgu sonucu kayıtların hepsi bir anda dbgridde görünüyor.
Hem de büyük sorgularda bilgisayar kasılıyor. yukarıda söylediğim gibi bir şey yapılabiliyorsa çok iyi olur. Sorgu çalıştıkça kayıtlar dbgride doluşsunlar.
Nedir? Nasıl olur? Anlatabildim mi acaba olayı?
geçen gün bir programdan gördüm, büyük bir rapor hazırlanırken, saniyeler geçtikçe kayıtlar dbgride yazılıyordu. Ama benim kullandığım dbgrid ve ibqueryde sorgu tamamen bitince sorgu sonucu kayıtların hepsi bir anda dbgridde görünüyor.
Hem de büyük sorgularda bilgisayar kasılıyor. yukarıda söylediğim gibi bir şey yapılabiliyorsa çok iyi olur. Sorgu çalıştıkça kayıtlar dbgride doluşsunlar.
Nedir? Nasıl olur? Anlatabildim mi acaba olayı?
Böyle bişeyin olacağını zannetmiyorum.
Sizinde dile geirdiğiniz üzere. Sorgu sonuçlanmamış ? yani ilgili işlem bitmemişki ?
Bunu sadece sorgu sonucu bittiğinde illegaş olrak bişeyler yaparak çözebilrsinin sanırım.
Saygılarımla
Kolay gelsin.
Sizinde dile geirdiğiniz üzere. Sorgu sonuçlanmamış ? yani ilgili işlem bitmemişki ?
Bunu sadece sorgu sonucu bittiğinde illegaş olrak bişeyler yaparak çözebilrsinin sanırım.
Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
yorumlarınız için teşekkürler sayın @pro_imaj.
ama ben bu olayı gördüm. query'de her seferinde 10 kayıt almak gibi bir düşünce oluştu bende.
peki böyle birşey mümkün mü?
yani query'ye "kardeşim bu sorgudan kaç sonuç çıkarsa çıksın sen bana ilk 10 tanesini ver, sonra da 11-20 arasındakileri ver, sonra 21-30 arasındakileri ver" gibi bir işlem yaptırabilirmiyim?
ama ben bu olayı gördüm. query'de her seferinde 10 kayıt almak gibi bir düşünce oluştu bende.
peki böyle birşey mümkün mü?
yani query'ye "kardeşim bu sorgudan kaç sonuç çıkarsa çıksın sen bana ilk 10 tanesini ver, sonra da 11-20 arasındakileri ver, sonra 21-30 arasındakileri ver" gibi bir işlem yaptırabilirmiyim?
merhaba gecen bir arkadas bundan bahsediyordu. bende detay istemiştim gelince buluruz...nitrokonat yazdı:yorumlarınız için teşekkürler sayın @pro_imaj.
ama ben bu olayı gördüm. query'de her seferinde 10 kayıt almak gibi bir düşünce oluştu bende.
peki böyle birşey mümkün mü?
yani query'ye "kardeşim bu sorgudan kaç sonuç çıkarsa çıksın sen bana ilk 10 tanesini ver, sonra da 11-20 arasındakileri ver, sonra 21-30 arasındakileri ver" gibi bir işlem yaptırabilirmiyim?
sql de limit diye bir konut vardı
gibi kullanılıyordu.
Kod: Tümünü seç
select * from x limit 0,30
Kullandığınız veritabanının desteklemesi lazım.yani query'ye "kardeşim bu sorgudan kaç sonuç çıkarsa çıksın sen bana ilk 10 tanesini ver, sonra da 11-20 arasındakileri ver, sonra 21-30 arasındakileri ver" gibi bir işlem yaptırabilirmiyim?
Olabilenler için;
Genel SQL cümlesinin sonuna LIMIT konuluyor.
Örnek bir Postgresql komutu:
Kod: Tümünü seç
SELECT * FROM tablo LIMIT 10 OFFSET 1
Merhaba @Nikrokonat;
Böyle bişeyide yine mantık çerçevesinde yapabilrsiniz. dediğiniz işlem şöyle olabilir;_
integer bir değişken tanımlarsınız. Gridide örn 20 satıra denk gelecek şekilde ayarlayıp
Bu sql kodu ile ilk 20 kaydın gelmesini sağlıyacaksınız sonra dbgridin olaylarını kullanark ilgili Top 20 yi kendinize göre uyarlıyacaksınız page up page down tuşlarıyna basıldığından diğer 20 yi gösterecek şekilde. yani mantık olarak ekranda 20 kaydın görünmesini sağlicak bir algoritme uygulayabilrsiniz.
Piyasadaki tişcari prg bazıları (Link) buna benzer yöntemlerle listeleme işlemlerini yapıyorlar.
Saygılarımla
Kolay gelsin.
Böyle bişeyide yine mantık çerçevesinde yapabilrsiniz. dediğiniz işlem şöyle olabilir;_
integer bir değişken tanımlarsınız. Gridide örn 20 satıra denk gelecek şekilde ayarlayıp
Kod: Tümünü seç
SELECT TOP 20 * FROM TABLE
Where MalKodu between 'ilk10malkodu' and 'sonraki10malkodu'
Piyasadaki tişcari prg bazıları (Link) buna benzer yöntemlerle listeleme işlemlerini yapıyorlar.
Saygılarımla
Kolay gelsin.
En son pro_imaj tarafından 10 Tem 2006 01:48 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
_________________
Selam,
Aslında sorgu hızı kısmı biraz karanlık. Gerçekten de sorgu hızı mu düşük, yoksa bunu görsel bir arabirimde gösterme hızı mı düşük?
Basit bir örnek vereyim.
SELECT * FROM Tablo1 gibi basit bir sorgu yazdınız ve bu sorgu sonucu 1000 kayıt döndü. Bunu eğer cxGrid gibi bir tabloda gösterecekseniz, sorgu anında dönmesine rağmen, bileşenin veriyi kendi istediği şekilde kullanabilmesi için transform etmesinden dolayı bir hayli beklersiniz. Tahminimce sizin gördüğünüz de bu soruna bir çözüm oluşturuyor.
Temel mantık basit, ama kodlaması bir hayli zahmetli. Bir thread hazırlayın ve threade hem sorgu cümlenizi, hem de hedef olarak kullanacağını memory table'i gönderin. Daha sonra thread içinde Memory table'in bir kopyasını çıkarın, sorgu cümlenizi ADO gibi bir arabirim ile açın ve bütün kayıtları sıra ile mem table'in kopyasına kaydedin. Belli aralıklarla memtable ve memtable kopyasını senkronize edin. Böylece program çalışırken veriler sizin gördüğünüz gibi gelecektir.
Kolay gelsin,
Bahadır Alkaç
Aslında sorgu hızı kısmı biraz karanlık. Gerçekten de sorgu hızı mu düşük, yoksa bunu görsel bir arabirimde gösterme hızı mı düşük?
Basit bir örnek vereyim.
SELECT * FROM Tablo1 gibi basit bir sorgu yazdınız ve bu sorgu sonucu 1000 kayıt döndü. Bunu eğer cxGrid gibi bir tabloda gösterecekseniz, sorgu anında dönmesine rağmen, bileşenin veriyi kendi istediği şekilde kullanabilmesi için transform etmesinden dolayı bir hayli beklersiniz. Tahminimce sizin gördüğünüz de bu soruna bir çözüm oluşturuyor.
Temel mantık basit, ama kodlaması bir hayli zahmetli. Bir thread hazırlayın ve threade hem sorgu cümlenizi, hem de hedef olarak kullanacağını memory table'i gönderin. Daha sonra thread içinde Memory table'in bir kopyasını çıkarın, sorgu cümlenizi ADO gibi bir arabirim ile açın ve bütün kayıtları sıra ile mem table'in kopyasına kaydedin. Belli aralıklarla memtable ve memtable kopyasını senkronize edin. Böylece program çalışırken veriler sizin gördüğünüz gibi gelecektir.
Kolay gelsin,
Bahadır Alkaç
@nitrokanat sen sonucu görüyorsun belki arka planda çalışan senaryo senin düşündüğün gibi olmayabilir. Belki sorgu tümden bitiriliyor gösterme işlemi adımlara bölünüyordur. Çünkü gösterme (ekrana çizme) çok zaman alan bir iş.
Diğer taraftan bir sorgu sonucunu bölmek mümkün. Tek sorgu yerine bölerek parça parça sonuç alınabilir. Örneği tablomda 100 kayıt var. 10 kayıt alırım
sonra 10 tanedaha alırım
bu işlemi storedprocedure de bir döngüyle yapabilirim.
Yalnız bir hatırlatma MS Sql serverda TOP (first yerine) FB deki gibi hızlı sonuç vermiyormuş. Daha önce deneyen ve yazan arkadaşlarımız olmuştu. @terminator ün yorumu enteresandı; "TOP tüm kayıtları işleyip içlerinden en seçkinlerini getiriyor" demişti.
Diğer taraftan bir sorgu sonucunu bölmek mümkün. Tek sorgu yerine bölerek parça parça sonuç alınabilir. Örneği tablomda 100 kayıt var. 10 kayıt alırım
Kod: Tümünü seç
select first(10) * from tablom
Kod: Tümünü seç
select first(10) skip(10) * from tablom
Yalnız bir hatırlatma MS Sql serverda TOP (first yerine) FB deki gibi hızlı sonuç vermiyormuş. Daha önce deneyen ve yazan arkadaşlarımız olmuştu. @terminator ün yorumu enteresandı; "TOP tüm kayıtları işleyip içlerinden en seçkinlerini getiriyor" demişti.
olayın gösterim kısmında olduğunu sanmıyorum çünkü bilgisayarın yoğun şekilde işlem yaptığı ve yaptıkça gride attığı belli.
parça parça data çekmek konusunda güzel fikirler çıktı.
peki querynin sql kodu değişince dbgriddeki mesela ilk 10 data kaybolacak,
dataların dbgridden kaybolmamasını nasıl sağlarız?
parça parça data çekmek konusunda güzel fikirler çıktı.
peki querynin sql kodu değişince dbgriddeki mesela ilk 10 data kaybolacak,
dataların dbgridden kaybolmamasını nasıl sağlarız?
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Direkt onunla alakalı.InfoPower paketinin DBGridini master detail (ExpandButton bileşeniyle birbirine bağlamak suretiyle..) şekilde bağlayıp çok fazla değil 3000 kayıtla filtre edip bir dene bakalım ekrana geliş süresi ne oluyor.Hemen akabinden de normal bi gridde select çek ve seyret filmi.Olay perde arkasında o şekilde gösterilecek şekilde ayarlanmıştır vs.nitrokonat yazdı:olayın gösterim kısmında olduğunu sanmıyorum
Kolay gele..
peki gösterim olayını kademe kademe yapmak mümkün mü? yani kayıtların hepsi birden gözükmesede 10-10 gözükse.aLonE CoDeR yazdı:Direkt onunla alakalı.InfoPower paketinin DBGridini master detail (ExpandButton bileşeniyle birbirine bağlamak suretiyle..) şekilde bağlayıp çok fazla değil 3000 kayıtla filtre edip bir dene bakalım ekrana geliş süresi ne oluyor.Hemen akabinden de normal bi gridde select çek ve seyret filmi.Olay perde arkasında o şekilde gösterilecek şekilde ayarlanmıştır vs.nitrokonat yazdı:olayın gösterim kısmında olduğunu sanmıyorum
Kolay gele..