dbgrid de silmeyi engelleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
guduknecmi
Üye
Mesajlar: 99
Kayıt: 08 Nis 2004 02:18
İletişim:

dbgrid de silmeyi engelleme

Mesaj gönderen guduknecmi »

selam
dbgrid de ctrl ve delete tuşlarına basılarak kayıt silinebiliyor ya işte ben onu engellemek istiyorum.read only yaptım işe yaramadı. şu kodu buldum ama, bir türlü çalışmadı bende

Kod: Tümünü seç

If (ssctrl in shift) and (key=vk_delete) Then

       key:=0;
Bu kod dışında ne önerirsiniz dbgrid de silmeyi önlemek için.

Birde kafama takılan birşey var. firebird ve Ibdataset kullanıyorum.
kayıt yaparken post ve insert into... arasında ne fark var.( tüm alanları kaydedeceksek)
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Sanırım dediğin kodu yanlış yere yazdın ondan çalıştıramadın. bende ctrl+del tuşlarını kapatıyorum aynı yöntemle çalışıyor...

Kodu keypress olayına yazdığına eminmisin
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
guduknecmi
Üye
Mesajlar: 99
Kayıt: 08 Nis 2004 02:18
İletişim:

Mesaj gönderen guduknecmi »

evet

Kod: Tümünü seç

procedure TFrmSonuc.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
If (ssctrl in shift) and (key=vk_delete) Then

       key:=0;
end;
verdiği hata
[Error] Usonuc.pas(59): Undeclared identifier: 'shift'
shift yerine vk_shift yazdım bu defada
[Error] Usonuc.pas(59): Operator not applicable to this operand type
hatası verdi.
(kodu formun onkeypress ine de yazdım aynı hatayı verdi)
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Farklı bir bakış açısı olsun diye soyluyorum...

DBGrid'in bagli oldugu dataset'in beforedelete eventine

Kod: Tümünü seç

Abort;
yazmanız da yeterli olur ve %100 garanti bir şekilde silme içini engeller....
Tabiri caizse suyu kaynağından kesmiş olursunuz... ;)
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Fahrettin Abi BeforeDelete olayına yazdığımız zaman silinmeyi tamamen engellemiş olmazmıyız. Yani bu defa sil diye bir butaon konuldauğu zamanda silimez istediğimiz kayıt yanlışmı anladım yoksa....,
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

evet tabi comple engellemiş olursunuz. Dogru ben komple silmeyi engellemek istediginizi dusunmustum ama galiba yanılmısım ;)
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

evet BeforeDelete yazarsan tümden silmeyi engellemiş olursun. amacın bu ise en güzeli bu yöntemi kullanmaktır.
guduknecmi
Üye
Mesajlar: 99
Kayıt: 08 Nis 2004 02:18
İletişim:

tamamdır

Mesaj gönderen guduknecmi »

Fahrettin Bey dediğiniz yöntem işime yaradı.Sayenizde kafam rahat artık.
Teşekkür ederim.
o kod niye çalışmadı bende acaba?Uses de mi bir eksik var ki.

Kod: Tümünü seç

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls, Buttons;
Bir yorumunuzu alsam.kayıt yaparken post ve insert into... arasında ne fark var.( tüm alanları kaydedeceksek)
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
dbgrid de ctrl ve delete tuşlarına basılarak kayıt silinebiliyor ya işte ben onu engellemek istiyorum.read only yaptım işe yaramadı.
Dbgrid1.readOnly:=true
yaptığınız zaman silinememesi gerekir. Ben böyle kullanıyorum.
Silmek istediğinizde de;

Kod: Tümünü seç

procedure Tanafrm.SilClick(Sender: TObject);
begin
if (MessageDlg('Bu Kayıt Silinecek'+#13+
                'E M İ N M İ S İ N İ Z?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
     begin
     dm.tablo.Edit;
   dm.tablo.delete;
     end;
end;
Kolay gelsin
En son hakkus tarafından 18 May 2004 11:15 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
saygılar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

If (ssctrl in shift) and (key=vk_delete) Then 

       key:=0; 
KeyDown bölümüne bu kodu yazmayı denedinizmi?

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Re: tamamdır

Mesaj gönderen fahrettin »

guduknecmi yazdı:Bir yorumunuzu alsam.kayıt yaparken post ve insert into... arasında ne fark var.( tüm alanları kaydedeceksek)
Post: Dataset'in bir metodudur.... Edit moddaki ya da insert moddaki bir datasette ilgili alanlara degerler atandıktan sonra sonucun veritabanına gonderilmesini saglar.... Eger bilgiler ekrandaki DBEdit'lerden vs.. aliniyorsa bu sekilde kullanmak uygundur...
insert into ise: bir SQL komutudur ve ancak bir Query componenti icine yazılıp ExecSQL metodunu cagirarak calistirilir... Bununla ise eldeki verileri bir anda tabloya insert etmeye yarar. Eger insert edilecek veriler bir sekilde belirli degiskenler halinde elde var ise bu yontem daha uygun ve performas acisindan daha iyidir.
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
guduknecmi
Üye
Mesajlar: 99
Kayıt: 08 Nis 2004 02:18
İletişim:

Mesaj gönderen guduknecmi »

Fahrettin Bey yorumunuzla aydınlattınız beni.Dbeditleri kullanıyorum ve post ile kaydediyorum.İnsert into ... ya göre dezavantajı,eksiği varmıdır diye kafama takıldıydı.Şu halde bir mahsur yok.

husonet
KeyDown bölümüne bu kodu yazmayı denedinizmi?
kodu yazdığım yeri değiştirmenin şu aşamada bir önemi olduğunu sanmıyorum.Çünkü kod unitin içinde olunca yukarıdaki hataları veriyor ve program açılmıyor. Şimdi Fahrettin Bey'in verdiği kodu kullanıyorum.
İlgilenen arkadaşlara teşekkür ederim.
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Fahrettin Abi BeforeDelete olayına yazdığımız zaman silinmeyi tamamen engellemiş olmazmıyız. Yani bu defa sil diye bir butaon konuldauğu zamanda silimez istediğimiz kayıt yanlışmı anladım yoksa....,
Evet bu konuda adminlerim gerekli bilgiyi vermişler.Ben de bir buton koyup silme işlemi yapmanız gerektiğinde yapmanız gerekeni yazayım dedim.

Kod: Tümünü seç

 
procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
begin
     Abort;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     If Application.MessageBox('Bu kaydı silmek istediğinizden eminmisiniz ?','.::?::.',mb_YesNo+mb_IconQuestion)=IDYES Then
     Begin
          Table1.BeforeDelete:=nil;
          Table1.Delete;
          Table1.BeforeDelete:=Table1BeforeDelete;
     End;
end;
ben bu şekilde kullanıyorum..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

GudukNecmi Demişki!
kodu yazdığım yeri değiştirmenin şu aşamada bir önemi olduğunu sanmıyorum.Çünkü kod unitin içinde olunca yukarıdaki hataları veriyor ve program açılmıyor. Şimdi Fahrettin Bey'in verdiği kodu kullanıyorum.
Unit'in içerisinde kodu yazdığınız yerin önemi büyüktür.

Mesala
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);

KeyDown eventi key işleme alınmadan önce çalışır.
Key down eventi Key değerini word olarak alır. VK_DELETE const'u burada bir hataya sebep olmaz.

ama
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);

Keypress eventi ise key in basıldığı anda işleme alındığı zamanla aynı zamanda hareket eder. Ve Key in aldığı değer Char türden olduğu için VK_DELETE sabiti bir error la sonuçlanır çünkü atama karakter tipinde olmalıdır.

Bu arada olayınızı hallettiğinize sevindim.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
derya
Kıdemli Üye
Mesajlar: 68
Kayıt: 16 May 2004 02:43
Konum: Almanya/Bonn
İletişim:

Re: dbgrid de silmeyi engelleme

Mesaj gönderen derya »

guduknecmi yazdı: dbgrid de ctrl ve delete tuşlarına basılarak kayıt silinebiliyor ya işte ben onu engellemek istiyorum.read only yaptım işe yaramadı.
ReadOnly yerine Options'de dgEditing'i false yapsan olmuyor mu?
Cevapla