Entwickler-Ecke

Datenbanken - Löschen in DBGrid unterbinden


Arakis - So 15.09.02 12:25
Titel: Löschen in DBGrid unterbinden
Hi Leute,
wie kann man in einem DBGrid oder ähnlichem unterbinden, dass zwar editiert(UPDATE), aber nicht gelöscht werden darf(DELETE)? Denn mit STRG-DEL spring mir immer eine Löschabfrage auf den Bildschirm.

Bis dann
user defined image


Klabautermann - So 15.09.02 13:03

Hallo,

du kannst dich im BeforeDelete Ereignis des Tabellen-Objektes hängen und den löschvorgang mit einem

Quelltext
1:
DataSet.Cancel;                    

abbrechen.

Gruß
Klabautermann


Arakis - So 15.09.02 13:10

Hat nicht funktioniert :(

Quelltext
1:
2:
3:
4:
procedure TForm_Main.AdressQueryBeforeDelete(DataSet: TDataSet);
begin
  DataSet.Cancel;
end;


Bis dann
user defined image


bis11 - So 15.09.02 13:32

Hi Akaris,

probiere es mal mit folgendem Code :


Quelltext
1:
2:
3:
4:
5:
procedure TKundenformularfenster.DBKundenGesamtKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin                                             
  if (ssctrl in Shift) and (key = VK_DELETE) then key := 0;                    
end;


LCS - So 15.09.02 14:22

Oder so:

Quelltext
1:
2:
3:
4:
procedure TForm_Main.AdressQueryBeforeDelete(DataSet: TDataSet); 
begin 
  Abort; 
end;


Gruss Lothar


NetSpider - Di 30.01.07 09:33

Hi Leute,

ist zwar schon lange her - allerdings hatte ich auch eben das Problem mit den DBGrid. Ich habe die Version von bis11 verwendet, da ich glaube, dass LCSs Version zwar funktioniert, allerdings wird jeglicher Delete-Versuch abgebrochen - also auch die evtl. gewollten Loesch-Aktionen.

Find ich nicht so gut, dass die DBGrids keine Option anbieten, bei der man diese Tastenkombinationen disablen kann.

MfG NetSpider


jasocul - Di 30.01.07 10:17

Ich hatte mal ein ähnliches Problem und habe einfach eine Exception ausgelöst.
Zum Beispiel:

Delphi-Quelltext
1:
raise EDatabaseError.Create ('Unzulässiger Löschvorgang!');                    

Probiere das doch mal im "BeforeDelete". Ich meine, dass Cancel und Abort sich nur auf die Erfassung und das Ändern von Datensätzen bezieht.


raiguen - Mi 31.01.07 00:28

Das sollte funktionieren:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TfrmBenutzer.DBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
  if (ssctrl in Shift) and (key = VK_DELETE) then 
  begin
    (Sender as TDBGrid).DataSource.DataSet.Cancel;  //<<-- WICHTIG!! Löschvorgang wird abgebrochen!!
    key := 0;  
  end;
end;


Ohne die hervorgehobene Zeile bzw Anweisung wird trotzdem der Datensatz gelöscht!!