Tablo da değişiklik olmadan IBDataset1.post ettiğimde..Hata.

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
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

Tablo da değişiklik olmadan IBDataset1.post ettiğimde..Hata.

Mesaj gönderen Turki »

Herkese Kolay gelsin Firebird 1.5 da kayıt girmeden veya değişiklik yapmadığım halde,Buttonla IBDataset1.post ettiğimde..Hata veriyor..Hazırladığım kaydet komutu şu;

Kod: Tümünü seç

procedure TForm1.BitBtn5Click(Sender: TObject);
//Kaydet
var
 deg:integer;
begin
 deg:=Application.MessageBox('KAYDETMEK iSTiYORMUSUNUZ','KAYDET',MB_YesNO);
 if deg=mrYes Then
   begin
    IBDataSet1.Post;
    ShowMessage('DOSYA KAYDEDiLDi');
   end
 else
  ShowMessage('KAYIT iSLEMi iPTAL');
end;
Aşagıdaki şekilde de yine hata veriyor..

Kod: Tümünü seç

    IBDataSet1.Post;
    ShowMessage('DOSYA KAYDEDiLDi');

Hata vermesi normalmi?...try ..Except le kontrol altına alırım ama bir değişiklik olmadanda kaydetsin istiyorum..
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba firebird gibi server tabanlı vt lere direkt post diyerek kayıt yapamazsın bu işlemi IBTransaction bileşine yaptırman gerekiyor.

Kod: Tümünü seç

procedure TForm1.BitBtn5Click(Sender: TObject); 
//Kaydet 
var 
 deg:integer; 
begin 
 deg := Application.MessageBox('KAYDETMEK iSTiYORMUSUNUZ', 'KAYDET', + 4 + 64 + 0 + 4096); 
 if deg = 6 Then 
   begin 
     IBTransaction1.CommitRetaining; 
     ShowMessage('BİLGİLER BAŞARIYLA  KAYDEDiLDi'); 
   end 
 else 
   IBTransaction1.RollbackRetaining; 
   IBTable1.Close;
   IBTable1.Open;
   ShowMessage('KAYIT iSLEMi iPTAL EDİLDİ'); 
end;
yukarıda görmüş olduğun commitretaining bilgileri vt ye yazar birde commit diyebilirsin bu da vt ye yazar fakat transaction işlemini kapatır. commit kullanırsan tekrar IBTransaction1.Start demelisin.
RollbackRetaining ise girmiş olduğun bilgileri vt ye yazmaktan vazgeçtiğin durumlarda yapmalısın. ancak burda birşey var. geri al işleminden sonra bilgiler tabloda görünecektir. update yapman gerekecek veya

Kod: Tümünü seç

IBTable1.close;
IBTable1.Open; 
bu işi halleder.
kolay gelsin.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

VT..Post..........

Mesaj gönderen Turki »

Bu Açıklayıcı ve faydalı Bilgiler için Teşekkür ederim...İyi Çalışmalar..
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: Tablo da değişiklik olmadan IBDataset1.post ettiğimde..H

Mesaj gönderen ALUCARD »

Turki yazdı:
Aşagıdaki şekilde de yine hata veriyor..

Kod: Tümünü seç

    IBDataSet1.Post;
    ShowMessage('DOSYA KAYDEDiLDi');
..
o zaman

Kod: Tümünü seç

   
IBDataSet1.edit;
IBDataSet1.Post;
ShowMessage('DOSYA KAYDEDiLDi');
hata vermeden kaydeder.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

hocam yanlış olmasın ben yukarıda vt ye kayıttan bahsediyorum sizin dediğiniz kalıcı olmaz arkadaş vt firebird diyor. paradox değil ki. programı close ettiğinde bilginin kaydedilmediğini anlarsınız. bu iş transaction nın işi... edit denilmesi durumu değiştirmez.....
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

kadirkurtoglu yazdı:hocam yanlış olmasın ben yukarıda vt ye kayıttan bahsediyorum sizin dediğiniz kalıcı olmaz arkadaş vt firebird diyor. paradox değil ki. programı close ettiğinde bilginin kaydedilmediğini anlarsınız. bu iş transaction nın işi... edit denilmesi durumu değiştirmez.....
edit denmesi hatayı ortadan kaldırır :(

ben transaction ları afterpost ve afterdelete de kullandığımiçin oyle yazdım :lol:
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Mesaj gönderen HBV »

Kod: Tümünü seç

IBDataSet1.edit; 
IBDataSet1.Post; 
ShowMessage('DOSYA KAYDEDiLDi');
Bu Şekilde bende denedim Problem çözülmesi lazım....
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

Mesaj gönderen Turki »

Eveeet Çok Sağolun problem Çözüldü.......

Kod: Tümünü seç

IBDataSet1.edit; 
IBDataSet1.Post; 
ShowMessage('DOSYA KAYDEDiLDi');
Doğrusu buymuş.....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Hatalı bir durum sözkonusu :?: Zaten IBDataSet edit veya insert modunda değilse doğal olarak post edemiyecektir. Onun yerine şöyle bir kontrol işi garanti eder;

Kod: Tümünü seç

if IBDataSet1.State in [dsInsert, dsEdit] then
  IBDataSet1.Post;
Bu işlemden sonra IBDataSet in OnPost una da bağlı Transaction için;

Kod: Tümünü seç

IBTransaction1.CommitRetaining; 
demek gerekiyor ki kayıt gerçekten VT ye yazılsın.. yoksa havada kalır :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

Mesaj gönderen Turki »

Evet Hocam bu Daha sağlıklı oldu gerçekten Allah razı olsun bizim daha çok ekmek yememiz lazım...
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Edit olan bir kaydı Post etmeden önce şu şekilde bir kontrol de yapılabilir ....

Kod: Tümünü seç

if Dataset.Modified then
.............
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

Mesaj gönderen Turki »

Kod: Tümünü seç

var
 c:Integer;
begin
 if IBDataSet1.Modified then
   begin
    c:=Application.MessageBox('FORM DA DEGiSiKLiKLER OLDU CIKMADAN ÖNCE KAYDEDiLSiNMi', 'CIKIS',Mb_YesNoCancel + Mb_IconQuestion);
    case c of
      IdYes:
      IBDataSet1.Post;
      IdNo: ;
      IdCancel:
      Action := caNone;
    end;
  end;
Çok sağol...
Ben Bu kodla Formun On Close Olayına yazıp,değişiklikleri kaydediyorum..
,hiç bir işlem yapmadan (Kulanıcılar bunu yapıyor) kaydet butonuna basmak ...Bunuda düşünmek zorundayız...

rSimsek Hocamın verdiği komut daha sağlıklı hiç bir hata vermiyor..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

OnClose değil OnCloseQuery de yazarsan ve de İptal seçeneğine basınca form kapatılmadan canClose değişkeni := False ile formda kalması sağlanabilir.. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Turki
Üye
Mesajlar: 75
Kayıt: 03 May 2005 08:02

Mesaj gönderen Turki »

Evet Hocam Bu daha güzel Formdan Çıkmadan Değişiklikler ,,uyarılır ve devam edilir.Teşekkürler Hocam .....
Cevapla