ibx de yapılan değişikliği diğer formda göremiyorum

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
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

ibx de yapılan değişikliği diğer formda göremiyorum

Mesaj gönderen deltas »

İyi Günler Arkadaşlar.

Sorunum şu. 2 tane formum var birincisinde kayıt, düzeltme ve silme işlemlerini yapıyorum diğerinde de bu yaptığım işlemlemin sonucunu görüyorum. (daha doğrusu göremeye çalışıyorum.)
Birinci formum bu şekilde:

Kod: Tümünü seç

procedure TForm2.Button1Click(Sender: TObject);
begin
dm.IBQUERY1.Close;
dm.IBQUERY1.SQL.Clear;
dm.IBQUERY1.SQL.Add('insert into sicil');
dm.IBQUERY1.SQL.Add('(sicilno,tckimlik,emekno,adi,soyadi,kadro,unvan,kderece,mderece,mkademe)');
dm.IBQUERY1.SQL.Add('values(:sicilno,:tckimlik,:emekno,:adi,:soyadi,:kadro,:unvan,:kderece,:mderece,:mkademe)');
dm.IBQUERY1.ParamByName('sicilno').AsString:=Trim(Edit1.Text);
dm.IBQUERY1.ParamByName('tckimlik').AsString:=Trim(Edit2.Text);
dm.IBQUERY1.ParamByName('emekno').AsString:=Trim(Edit3.Text);
dm.IBQUERY1.ParamByName('adi').AsString:=Trim(Edit4.Text);
dm.IBQUERY1.ParamByName('soyadi').AsString:=Trim(Edit5.Text);
dm.IBQUERY1.ParamByName('kadro').AsString:=Trim(combobox1.Text);
dm.IBQUERY1.ParamByName('unvan').AsString:=Trim(combobox2.Text);
dm.IBQUERY1.ParamByName('kderece').AsString:=Trim(combobox3.Text);
dm.IBQUERY1.ParamByName('mderece').AsString:=Trim(combobox4.Text);
dm.IBQUERY1.ParamByName('mkademe').AsString:=Trim(combobox5.Text);
dm.IBQUERY1.Prepare;
dm.IBQUERY1.ExecSQL;
dm.sevk1.Commit;
İkinci forum ise bu şekilde

Kod: Tümünü seç

procedure TForm4.FormCreate(Sender: TObject);
begin
dm.sevk3.Active:=true;
dbgrid1.DataSource:= dm.datasource1;
dbgrid1.Refresh;
dm.IBQuery2.Active:= true;
dm.IBQUERY2.Close;
dm.IBQUERY2.SQL.Clear;
dm.IBQUERY2.SQL.Add('select * from sicil');
dm.IBQUERY2.OPEN;
end;
Sorunum şöyle 1. forumdan değişiklik yaptıksan sonra ikinci forma geçtiğimde bu değişiklikler 1 defa görünüyor. 2. formdan çıkıp tekrar 1. forma girip başka değişiklikler yaptığımda yeniden 2. forma döndümde değişiklikleri göstermiyor. Programı açıp kapatmam gerekiyor. nerede hata yaptığımı anlamadım.

ayrıca datamodulde :

Kod: Tümünü seç

procedure Tdm.IBQuery1BeforeOpen(DataSet: TDataSet);
begin
if not sevk.Connected=True then
sevk.Connected:=True;
if sevk1.Active=False then
sevk1.Active:=True;
end;

procedure Tdm.IBQuery1AfterPost(DataSet: TDataSet);
begin
IBquery1.ApplyUpdates;
sevk1.CommitRetaining;
end;
kullandım. Teşekkür ederim...
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

programı kapatıp açtığında close-open yapıldığı için yeni kayıtları görebiliyorsun. kısaca bu konu daha önce çok konuşuldu. arama yaparsan.

1.Query den select ile veri çekerken Database de ki ilgili tabloda ki kayıt sayısı 100 diyelim.

2.Query 1.Query ile aynı anda açılırsa yani veriyi eş zamanlı çekerken kayıt sayılarını eşitleyeceklerdir.

1.Query den veri girişi yaptığınızda veya sildiğinizde bundan şimdilik Query1 haberdardır Commit dediğin anda ilgili değişiklikler Database ye yazılacaktır. tam bu güncelleme esnasında 2.Query i sen close open yap.
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

kadir hocam dediklerinizi daha önce denemiştim. yine denedim olmadı. ayrıca benim dbgrid ve veri eklediğim yerler ayrı formlarda.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Transaction ve CommitRetaining diye aratırsan cevaba ulaşırsın :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

rsimsek hocam daha önce arama yapmıştım ve yazılanlardan birşey kaçırdımmı diye tekrardan kontrol etmiştim.
Transaction1(sevk1) ve Transaction2(sevk3) bunların configrasyonlarında bir hata yok. Read commited durumunda. yarıca insert işleminden sonra CommitRetaining yapıyorum. aynı formda işle yaptığımda sorun çıkmıyor. diğer forma geçince orada göremiyorum. Ancak database active false/true yapıca oluyor fakat formcreatte yine olmuyor.
yani

Kod: Tümünü seç

procedure TForm4.FormCreate(Sender: TObject);
begin
dm.sevk.Connected:=false;
dm.sevk.Connected:=true;
dm.sevk3.Active:=true;
dbgrid1.DataSource:= dm.datasource1;
dm.IBQuery2.Active:= true;
dm.IBQUERY2.Close;
dm.IBQUERY2.SQL.Clear;
dm.IBQUERY2.SQL.Add('select * from sicil');
dm.IBQUERY2.OPEN;
burada olmuyor. ancak forma 1 buton koyunca :

Kod: Tümünü seç

procedure TForm4.Button2Click(Sender: TObject);
begin
dm.sevk.Connected:=false;
dm.sevk.Connected:=true;
dm.sevk3.Active:=true;
dbgrid1.DataSource:= dm.datasource1;
dm.IBQuery2.Active:= true;
dm.IBQUERY2.Close;
dm.IBQUERY2.SQL.Clear;
dm.IBQUERY2.SQL.Add('select * from sicil');
dm.IBQUERY2.OPEN;
end;
bilgiler güncelleniyor.

Ancak database açıp kapatmak bana pek mantıklı gelmiyor. başka yolunu bulmam lazım.
İlginize teşekkür ederim.
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a
nedeni form4 ü bir kere create etmeniz olabilirmi?
form4 ün autocreate forms dan alıp manuel create etmeniz sorunu çözebilir.
yada kodu form4 ün show una yazmanız olayı çözebilir gibime geliyor.
zira formun createsine yazdığınız kodlar 1 defa çalışacak ve ondan sonra yaptığınız değişiklikleri güncellemiyecektir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Teşşekkür ederim hocam. Show olayı hiç aklıma gelmemişti..
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Cevapla