FireBird ile IBDataSet

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ı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

FireBird ile IBDataSet

Mesaj gönderen lazio »

merhabalar,
FireBird ile IBDataSet kullanıyorum ve şöyle bir sorunum var.
IBDataSet in SelectSql i şöyle;

Kod: Tümünü seç

select * from Table1 where Durum = '1'
tabloya insert metoduyla kayıt ekleyebiliyorum.
insert te Durum alanı defaul '1' olarak geliyor ve DBGrid de kaydı görebiliyorum.
Ancak aynı kaydı Edit metoduyla değiştirdiğimde ve '1' i '0' yaptığımda kaydı görmek istemiyorum ama hala gözüküyor.
IBDataSet in AfterPost unda Transaction ı CommitRetaining ediyorum hatta refres ediyorum yinede olmuyur.
IBDataSet i Close - Open yaptığımda sorun çözülüyor ama ben bunu istemiyorum.
Forumdaki önceki konulara baktım ama tam olarak sorumun cevabı yok.
Benki korkutan IBDataSet te Query mantığı ile çalıştığı için Close - Open yapılmadan kaydı göremememdir.
kolay gelsin..
Resim

..::|YeşilMavi|::..
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

Selamun Aleykum ;

öncelikle IBDataset'tin üzerine sağ tuşla tıklayarak DataSet Editor'den Generate SQL işlemini yaptınız mı? hocam

Kolay Gelsin;
;)
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Merhabalar,

Select SQL'iniz tamam ama RefreshSQL'i gözden kaçırmış olabilir misiniz?

Insert'i Post ettikten sonra veritabanı select değil refresh yapar. RefreshSQL'e de Where Durum = '1' kısıtını eklemeniz gerekir.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

merhaba;
@selman, generate ettim
@codelord RefreshSql ide düzenleyerek denedim ama değişen bişey yok.
Resim

..::|YeşilMavi|::..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

- Dataset'in Forced Refresh'ini True yapmanız gerekebilir.
Set ForcedRefresh to true to force the dataset to refresh its data every time it posts a record. When ForcedRefresh is false (the default), the data is only refreshed when you call the Refresh method, or when the dataset needs to fetch the value of a default or internally calculated field.
- Cached Updates açık olabilir mi?
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

ilginiz için teşekkürler ama Forced Refresh denedim işe yaramadı. :duvar:
o zaten dataseti otomatik refres etmek için help ten okuduğum kadarıyla.
cache update de iki türlüde denedim :Noops
:N( :N( :N(
Resim

..::|YeşilMavi|::..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

En güzeli Tabloyu kapatıp açacaksın veya Filtre özelliğini kullanacaksın. Başka yolu yok gibi.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

merhaba,
walla dataseti açıp kapatmak istemiyorum. sonuçta tablo olarak kullanıyorum ve prog.a bir yük getirir bu işlem ama filtre olayı mantıklı geldi bi deneyim.
bu arada bu işlemin yapılabilmesi lazım esasında. muhakkak bir yolu vardır, yoksa bile bence bi eksiklik.
kolay gelsin.
Resim

..::|YeşilMavi|::..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Muhtemelen Transaction'ların çalışma mantığından kaynaklanıyor. Açıkçası sorununuzu fazla inceleme şansım olmadı.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

sanıldıgı gibi dataseti acıp kapamak o kadar yuk getirmez
ben kapa-ac seklinde calıstırıyorum, normal insan insert ve edit hızında hic sorun olmaz.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

sorun yeni kayıta atanan id numarasıyla alakalı olabilir. bu durum tablonun primary key alanına değeri nasıl atadığınız ile ilgilidir.

eğer olaylar şu şekilde cereyan ediyorsa bu tür bir durumla karşılaşmanız doğaldır.

yeni kayıt eklediğiniz zaman id alanını kontrol edin.
genelde bu alana 0 atanır ve commit işleminde veritabanı bu 0 yerine generatorden gelen id numarasını kullanarak kayıda uygun id yi aktarır.
veritabanı tarafında bu kaydın idsi (atıyorum) 715 gibi bir rakamken delphi tarafında bu kaydın idsi hala 0 görünmektedir.
refresh sqlde ise büyük ihtimalle where id = :id gibi bir satır vardır. id ler farklı olduğundan refresh tam olarak istediğiniz gibi çalışmayacaktır.

tabloyu açıp kapatınca sorununn düzelmesi bu tür bir problem yaşadığınıza işaret ediyor...

gridi id alanını da göstrecek şekilde ayarlayıp bu durumun oluşup oluşmadığnı bir kontrol edin isterseniz....
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Gökmen'in dediği gibi kesinlikle hız kaybın olmaz tabi bu durma bağlı, yani lookupfield vs gibi eventlarda işlemler yaptırıyorsan bunlar yavaşlatabilir. Daha önceleri konular geçti. Generate event konusylada biraz alakalı bu. Yani mecburen kapatıp açıcakasın.
Diğer tavsiyem ise Filtre mümkün olduğunca kullanma, Query direk db den alınır yani sadece verdiğin şarta uygun sonuçlar gelir. Ama filtre kullanırsan önce tüm kayıtlar alınır ve ondan sonra filtrelenip gösterilir. Şöyleki 10,000 kayıt okunup 100 tanesi gösterilir. Sadece SQL ile kullanılırsa db den 100 kayıt gelir

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Bu sorun veritabanlarından kaynaklanmıyor ki.. Delphi bileşenlerinden kaynaklanan bir sorun... Tablolar kendini refresh ediyor ancak delphi bileşenleri (DBGrid, DBedit gibi) kendini refresh etmediği için hala cachede ki bilgileri görüyorsunuz.. Hiç bir yolu yok. Doğrudan tabloyu kapatıp açacaksınız... Freman ve gökmen in dediği gibi hız kaybınız olmayacaktır. Tabi bütün tabloyu fetch etmiyorsanız. Sadece Fetch işleminiz ve lookup işlemleriniz varsa hız kaybınız olacaktır...

Sevgiler..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Veritabanında bir view create edilip, tablo gibi programdan kullanılarak ve de her posttan sonra refresh edilerek denenebilir.

View in de tablodan ve query den farkı olmadığı düşünülürse, son çözümün SP de olacağı düşünülmeli :wink: :lol:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

cevaplar için çok teşekkürler,
sorunumu şimdilik ibdataseti close - open yaparak hallettim. 8)
zaten vt yapısı ve where = '1' nedeni ile ibdatasetin döndürdüğü kayıt sayısı en fazla 10 - 15 oluyor. yani performans düşüklüğü olacağını sanmıyorun dediğiniz gibi.. :roll:
Resim

..::|YeşilMavi|::..
Cevapla