Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Einfügen der neuen Datensätze (https://www.delphipraxis.net/13177-einfuegen-der-neuen-datensaetze.html)

Natalia 12. Dez 2003 14:05


Einfügen der neuen Datensätze
 
Hallo Leute, :)

Kann mir vielleicht jemand bei dem folgenden Problem helfen:
In einem DBGrid das Einfügen des neuen Datensatztes verhindern,
aber die Tabelle trotzdem editieren können?

Danke für alle Vorschläge

barnti 12. Dez 2003 14:12

Re: Einfügen der neuen Datensätze
 
hallo,
ich weiß nicht, ob ich Dich richtig verstehe, deshalb mal meine Idee nach Deinen Ausführungen:

Editiere die Tabelle in einer Transaktion. Die Änderungen werden erst sichtbar nachdem Du die Änderungen mit "commit" bestätigst oder mit "Rollback" verwirfst.

Dachtest Du an so etwas?

Gruß,

Barnti

Natalia 12. Dez 2003 14:24

Re: Einfügen der neuen Datensätze
 
Ich meine es etwas anders: ich habe eine Tabelle vor mir,
da kann ich alles rein schreiben was ich möchte, aber ich darf
keine neuen Datensätze einfügen. Ist es möglich?

barnti 12. Dez 2003 14:35

Re: Einfügen der neuen Datensätze
 
Hallo Natalia,

Du meinst Du trägst etwas in das DBGrid ein, was nicht in die Tabelle soll?

Solange Du nicht postest und gegebenefalls auch "committest" wird die Tabelle nicht beschrieben.

Vielleicht sagst Du noch etwas mehr zu Deinem Problem...

Gruß,

Barnti

ims 12. Dez 2003 14:37

Re: Einfügen der neuen Datensätze
 
hast du einen dbnavigator? wenn ja, sperr einfach den button um einen neuen datensatz hinzuzufügen (nbInsert)
ansonsten besteht diese möglichkeit doch gar nicht? (korrigier mich wenn ich falsch liege...) aber wenn ich nur ein bdgrid habe, kann ich keine datensätze hinzufügen aber editieren geht ohne probleme...
wie greifst du denn auf die db zu? ado? mit query oder dataset?

[Edit]
@barnti: wenn du ado benutzt und ohne dbnavigator hantierst, dann wird automatisch "gepostet" wenn du editierst...

Leuselator 12. Dez 2003 14:42

Re: Einfügen der neuen Datensätze
 
Die Komponentenkette sieht ja so so aus:

[TDataSet]-------[TDataSource]------[TDbGrid]

Wenn Du im DbGrid (durch scrollen hinter den letzten Datensatzeintrag) einen neuen Datensatz "einfügst", wird das DataSet in den Zustand dsInsert versetzt. Erst wenn im Grid dieser Datensatz verlassen wird, wird er tatsächlich eingefügt. Das DbGrid kann diese Aktion nicht verhindern - das DataSet schon. Schau Dir mal das Ereignis "BeforeInsert" des DataSets an. Dort könntest Du ansetzen und zum Beispiel mit
Delphi-Quellcode:
procedure TForm1.Query1BeforeInsert(DataSet: TDataSet);
begin
  DatabaseError('Diese Datenmenge kann nur gelesen werden', Self);
end;
verhindern, das ein Datensatz eingefügt wird. Diese Variante verhindert so allerdings das Einfügen eines Datensatzes in dieses DataSets, egal woher die Einfügung stammt. Wenn Du also auf andere Art als über das Grid ein Hinzufügen von Datensätzen zulassen möchtest, müsstest Du entweder checken, wer da gerade einfügen möchte und nur im Falle des Grids den Fehler anzeigen, oder ein anderes Dataset zum einfügen benutzen. Dort müsstest Du dann nach dem Einfügen das Dataset des Grids aktualisieren.

Gruß

r_kerber 12. Dez 2003 15:57

Re: Einfügen der neuen Datensätze
 
Zitat:

Zitat von ims
hast du einen dbnavigator? wenn ja, sperr einfach den button um einen neuen datensatz hinzuzufügen (nbInsert)
ansonsten besteht diese möglichkeit doch gar nicht?

Das genügt nicht. Wenn Du im letzten Datensatz des DBGrid bist un auf Cursor nach unten drückst, dann wird eine leere Zeile angezeigt und Du kannst einen neuen Datensatz einfügen! Ich glaube dasselbe passiert auch, wenn Du auf die Taste EINFG drückst.

ims 12. Dez 2003 16:00

Re: Einfügen der neuen Datensätze
 
@r_kerber: hast recht :oops:

eddy 13. Dez 2003 18:46

Re: Einfügen der neuen Datensätze
 
Hallo Natalia,

ich werte in OnKeyDown die Tasten aus und damit verhindere ich das Anhängen von Datensätzen.

Code:
procedure TForm.dbg32KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ....
  case key of
    ....
    VK_Down: key := 0;
    ....
  end; {of case}
  ....
end;
mfg
eddy

woki 13. Dez 2003 19:50

Re: Einfügen der neuen Datensätze
 
Hallo Natalia,

eine bitte vorweg: Gib bei Fragen ausfürhlicher Informationen womit du arbeitest, das ist sonst ein stochern im Nebel:

Ich nehme an Du arbeitest mit TDBgrid, TDatasource, TTable, BDE, Paradox oder DBase.

Du kannst jetzt ein Insert verhindern indem du in der Ereignisroutine beforeInsert mit "abort" abbrichst:

Code:
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin
  abort;
end;
Grüsse
Woki


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz