kaydet demeden kaydetmesin

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sinopsbs
Üye
Mesajlar: 2
Kayıt: 02 Ağu 2013 02:01

kaydet demeden kaydetmesin

Mesaj gönderen sinopsbs »

Programda yeni, kaydet, iptal butonları var
kullanıcı yeni kayıt butonuna bastıktan sonra kaydetmeden grid üzerinde başka kayıtlar arasında gezindiğinde o ana kadar yazdıkları kaydediliyor.Ben kaydedilmesin istiyorum.Çünkü kaydet butonu ile kaydetmeden önce bazı kontroller yapıyorum.
Şu ana kadar denediklerim:
ibdataset insert modunda ise iptal etmesi için
cxgridin onclick olayına ve cxtableview oncellclick olayına;
ibdatasetin beforepost olayında bazı alanları dolu-boş olma durumunu kontrol ediyorum, boşsa iptal etmesini istedim.
dbeditlerden birinin onchange olayında alan dataset insert modunda ise iptal etmesini(kullanıcı bu edite bilgi girmiyor)
datasete bağlı olan datasource'ün autoedit. özelliği false,

Aklımda bir alanı veritabanında not null olarak ayarlamak var.Fakat sorunu program üzerinden çözmek istiyorum.

Sizce kaydet butonuna basılmadan verilerin kaydedilmemesini nasıl sağlarım?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: kaydet demeden kaydetmesin

Mesaj gönderen rsimsek »

Şöyle bir şey yapılabilir. Dataset in (Table/Query) BeforeInsert ve BeforeEdit inde de dataset.DisableControls; yazıp, Grid in üzerinde gezinmeyi iptal edebilirsin. AfterPost ve AfterCancel e de dataset.EnableControls; u ekleyince post veya cancel durumunda tekrar grid üzerinde gezinebilmeyi mümkün kılar.

İkinci yöntem transanction kullanmaktır. Kaydet butonuna dataset.Transaction.CommitRetaining; aksi halde veya Vazgeç/İptal diye bir butona da dataset.Transaction.RollbackRetaining; ile yapılan değişiklikler iptal edilir/geri alınır.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: kaydet demeden kaydetmesin

Mesaj gönderen sabanakman »

IBDataSet1.CachedUpdates:=True; yaptıktan sonra Append, Edit, Post, Delete işlemlerinizi tamamladıktan sonra bu işlemi IBDataSet1.ApplyUpdates ile onaylanabiliyor veya IBDataSet1.CancelUpdates ile iptal edilebiliyor olması lazım. Böyle bir deneme yapmadığım için denemesi size kalıyor. Teorik olarak bu özellikte değişiklikler veri tabanına iletilmeden delphi tarafında meydana gelmektedir. IBDataSet1.CachedUpdates:=False olursa da değişiklikler anında delphi tarafından veri tabanına iletilmektedir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sinopsbs
Üye
Mesajlar: 2
Kayıt: 02 Ağu 2013 02:01

Re: kaydet demeden kaydetmesin

Mesaj gönderen sinopsbs »

admin tavsiyesi dinledim ve datasete disablecontrols ve enablecontrols ayarı yaptım.Gridi kapattı ama bundan dbeditler de etkilendi ve veri girişine izin vermediler.Ben de bunu direk gride uyguladım.Yani yeni kayıt açtığımda gridi pasif, kayıt veya iptal edildiğinde ise gridi aktif yaptım.Sorunum da böylece çözülmüş oldu.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: kaydet demeden kaydetmesin

Mesaj gönderen csunguray »

Kayıttann önceki kontrolleri BeforePost evet ı içerisine yazmalısınız. Eğer BeforePost içerisinde bir exception oluşursa kayıt gerçekleşmeden kesilecek ve kontrol tekrar programa dönecektir.

Kod: Tümünü seç

procedure TDM.Table1BeforePost(DataSet: TDataSet);
begin
  if DataSet.FieldByName('KOD').AsString = '' then Exception.Create('Kodu boş geçemezsiniz');
end;
veya

Kod: Tümünü seç

procedure TDM.Table1BeforePost(DataSet: TDataSet);
begin
  if DataSet.FieldByName('KOD').AsString = '' then
  begin
    ShowMessage('Kodu boş geçemezsiniz');
    Abort;
  end;
end;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla