Kayıt değişir değişmez uyarı vermeliyim ama nasıl?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Kayıt değişir değişmez uyarı vermeliyim ama nasıl?

Mesaj gönderen nitro »

s.a
delphi 7 + firebird kullanıyorum.
bi dataset var. dataset'e selectsqlinde lazım olan kayıtları aldırıyorum.
bi dbgrid var bu dataset'e bağlı olan.
dataset'in cachedupdate özelliği false olarak kullanıyorum çünkü dbgridde yapılan anlık değişimlerin hemen database'e yansıması gerekiyor.
bi field var(varchar). eğer o fieldin değeri silinirse program anında uyarı versin ve onay alsın istiyorum. mesela field'de "TAHSİL EDİLDİ" yazıyor.
şahış "TAHSİL EDİLDİ" yazısını onay almadan (messagedlg) silemesin istiyorum. nasıl yapabilirım sizce? i
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

fieldin onchange olayına bişeyler yazdım.

Kod: Tümünü seç

if anaform.crhr_datasetHR2.text='' then 
      begin
      if messagedlg('İşlemi silmek istediğinizden eminmisiniz?',mtwarning,[mbyes,mbno],0)=Mrno then 
                    begin
                    ??????
                    end;
      end;
ama şöyle bir sorun var. PEKİ işlemi silmek istemezse eski değeri ben nerden bulucam? yani ??? olan yere nasıl bi kod yazıcam.?
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

kardeş yapmışsın zaten.bitmiş sen sadece şunu yapacan

Kod: Tümünü seç

if anaform.crhr_datasetHR2.text='' then 
      begin 
      if messagedlg('İşlemi silmek istediğinizden eminmisiniz?',mtwarning,[mbyes,mbno],0)=Mryes then 
                    begin 
                    buraya bi query ile o değeri silecen eğer evet ise demişiz dikkat et.eğer hayır seçerse bi işlem yapılmayacak zaten..
                    end; 
      end; 
..kolay gelsin istersen sana silem için bi sql gonderebilirim gerçi sen yaparsın...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

teşekkürler cüneyt kardeş ama messagedlg ile sorulan soruya NO cevabı alırsam ne olacak?
benim sorunum orda
adam NO yu tıklarsa, yani silmekten vazgeçerse field eski değerini nasıl geri alacak?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Burada dikkat çekici bir nokta var.

TEdit'ler de herhangi bir şeyi yazarken eğer kullanıcı Escape tuşuna basarsa eski değerini yerine koyar edit. Eğer Kullanıcı Edit'i terkederse (yani edit Focus kaybederse) yeni girilen bilgi Text'in asıl alanına yazılır, yani yeni bilgi artık çıkarkenki bilgi olur.

Şimdi adam edite girdi ve sildi. Hiçbir şey yapmadan Edit'ten de çıkmadan Escape'e basarsa problem yok, eski bilgi duruyor demektir.

Bu durumda sizin isediğinizi ben anlamadım. Tam olarak işlemi anlatır mısınız? Yani neyi hedefliyorsunuz? Belki de yanlış bir yol üzerinde hareket ediyor olabilirsiniz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

kardeş no tıklarsan hiçbirşey olmaz..sen eğer evet derse şunu yap diyorsun ama no ya tıklarsa hiçbirşey olmaz ama sen illa birşey olsun diyorsan şunuda yapabilirsin no ya tıklarsa exit yazarsın o procedureden çıkarsın..o kadar kolay gelsin
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

sayın Kuri_YJ olayı şöyle anlatayım. bir DBGRİDde bi field var. orda '02.02.2006 TAHSİL EDİLDİ' yazıyor. diyelim ki eleman bu field'e gelip backspace ile '02.02.2006 TAHSİL EDİLDİ' yazısını sildi ve o hücreyi terk etti. işte tam bu anda ben bi onay almak istiyorum eğer onaydan hayır cevabı gelirse field tekrar '02.02.2006 TAHSİL EDİLDİ' olsun istiyorum
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

aslında ben olaya bir çözüm buldum ama çok hantal bir çözüm. dataset'e verileri alırken aynı sorguyu bi de query'ye alıcam. eğer kullanıcı hayır derse query'den fieldin silinmeden önceki değerini bulup kaydettireceğim.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba;
Aşağıdaki gibi denediniz mi?

Kod: Tümünü seç

procedure TForm1.IBDataSet1GIRISLERChange(Sender: TField);
begin
   if messagedlg('İşlemi silmek istediğinizden eminmisiniz?',mtwarning,[mbyes,mbno],0)=Mrno then
                    begin
                   ibdataset1.Cancel;

                    end;


end;


Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

selam kayıt değişirse nasıl olur bilmem ama kayıt silinirse şöyle yapabilirsin kendine bir mesajformu oluşturursun.Üzerinde evet hayır butonları ve Bu kaydı silmek istediğiniz eminmisiniz gibisinden bir label koyarsın..daha sonra datasetin fields editöründe ilgili fieldsin
OnChange olayına

Kod: Tümünü seç

if IBDataset1ALAN_ADI.text='' then
mymesajform.showmodal;
yazarsın.Mesaj formdaki evet butonuna

Kod: Tümünü seç

close;
hayır butonuna ise

Kod: Tümünü seç

IBDataset1.cancelupdates;
close;
yazarsın.sanırım iş çözülür bu şekilde..
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

yardımlarınız için hepinize çok teşekkürler arkadaşlar.
aşagıdaki iki kod da aynı işi gördü ve sorun çözüldü.

Kod: Tümünü seç

dataset.cancel;

dataset.cancelupdates;

ama kafama takılan bir soru var? bu iki kod da aynı işi gördüyse (veya görüyosa) neden 2 farklı kod? yani bunlar arasında illa ki bi fark vardır ama yaptığım bütün testlerde aynı sonuçları verdiler. :)
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
nitrokonat yazdı:ama kafama takılan bir soru var? bu iki kod da aynı işi gördüyse (veya görüyosa) neden 2 farklı kod? yani bunlar arasında illa ki bi fark vardır ama yaptığım bütün testlerde aynı sonuçları verdiler. :)
Cancel için
Delphi Help yazdı: Cancels modifications to the current record if those changes are not yet posted.
cancelupdate;
Delphi Help yazdı: Clears all pending cached updates from the cache and restores the dataset its prior state.
İngilizcem o kadar iyi değil ama cancel update cache bufferda bulunan bilgileri silip aktif kayıttaki bilgilerin ilk değerini getiriyor.

Cancel kullanıldıktan sonra dataset dsbrowse durumuna alınıyor.
Ayrıca helpte ,cancelupdate te tek kayıt için uygulanacaksa revertrecord u çağırmayı uygun görüyor.

Sanırım datasetlerde cached update in true ve false oluşuna göre cancelupdate etkili oluyor.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

teşekkürler ofenx.
sanırım bu durumda (ki benim datasetimin cachedupdates değeri false) cancel kullanmak en iyisi.
saygılarımla
Cevapla