Delphi Can

Orjinalini görmek için tıklayınız: Table Flag ile Delete İşlemi
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Şimdi Table Flag ile neyi kastettim öncelikle ondan bahsetmek istiyorum. Normal şartlarda bizim bir veri tablosundan beklentimiz, biz değiştirelim,silelim,ekleyelim ama kaydetmesin, biz kaydet dediğinde kaydetsindir. Fakat bir Dataset kullandığımız zaman bu işlemleri yapmak direkt veritabanı nı etkilemektedir. Bu yüzden de bunlar için Dataset imize bayraklar ekleyerek ilgili kaydın durumunu kontrol altında tutabiliriz. Bunu aşağıdaki örnekte Delete işlemi için yaptım. Biraz daha ilerisini düşündüğümüzde, yapılacak şey ise ana verinin kopyasını alıp bu kopya üzerinde işlemler yaptıktan sonra Flag'lere bağlı olarak asıl veriyi güncelleme işlemidir.

Örnekte sadece Delete Flag ı attırıyorum fakat herhangi bir silme işlemi yaptırmıyorum. Sadece örnek olması açısından bu şekilde yaptım. Bu düşünce tarzı ile Listview'e yüklenen verilerde de Listview datasına ilgili kaydın Flaglerini ekleyebilir, işlemler yaptırabiliriz. 

Örnekte DEL tuşu Delete Flagı atmaktadır. Tekrar DEL tuşuna basarak ilgili Flag i geri alıyorum. Flag koyma kolonunu eklemek için Clientdataset bileşenine benim veritabanımda olmayan DELETED adında bir kolon ekliyorum. Bu kolonun tipi Calculated. Aynısı ADOQuery içinde geçerli. Bu kolonu Flag kolonu olarak kullanıyorum. Eğer DEL tuşuna basarsam bu kolonuda 1 olarak güncelliyorum. Tabiki bu kolon veritabanımda olmadığı için bir sıkıntı yaratmıyor. Basit mantık bu şekilde.

Biraz üzerinde çalışıldıktan sonra eminim güzel bir bileşen veya class haline getirebilirsiniz.

qbPzBd.gif

Kaynak kod:
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.kaynak kodları indirebilirsiniz | Yandex Disk
CTRL + DEL yaparsam.
İşte o zaman sıkıntı büyük olur Smile Biraz kod teröristliği yapıp kaynak koddan Keypress eventinde CTRL tuşunu kapatabilirsin yada direk kendi Keypresinde CTRL tuşunu kapatabilirsin.
(15-03-2017, Saat: 10:29)witalihakko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.İşte o zaman sıkıntı büyük olur Smile Biraz kod teröristliği yapıp kaynak koddan Keypress eventinde CTRL tuşunu kapatabilirsin yada direk kendi Keypresinde CTRL tuşunu kapatabilirsin.

Denemedim ama Roolback ve Commit dbgridde kullanılamıyor mu ?

Ben genelde bu gibi işlemlerde, silinen öğeyi, Trigger ile geri dönüşüm kutusu olarak hazırladığım bir tabloya atarım. ilgili tablodan silinir bu tabloya gider.
Delphi tarafında bir şeyler yapacağım derseniz; TDataSet'in OnBeforeDelete olayını kullanabilir, işiniz bittikten sonra Abort çağrımında bulunabilirsiniz.