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?
kaydet demeden kaydetmesin
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: kaydet demeden kaydetmesin
Şö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.
İ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!!
- 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
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: kaydet demeden kaydetmesin
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.
Re: kaydet demeden kaydetmesin
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.
veya
Kod: Tümünü seç
procedure TDM.Table1BeforePost(DataSet: TDataSet);
begin
if DataSet.FieldByName('KOD').AsString = '' then Exception.Create('Kodu boş geçemezsiniz');
end;
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/)
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/)