![]() |
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 |
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 |
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? |
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 |
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... |
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:
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.
procedure TForm1.Query1BeforeInsert(DataSet: TDataSet);
begin DatabaseError('Diese Datenmenge kann nur gelesen werden', Self); end; Gruß |
Re: Einfügen der neuen Datensätze
Zitat:
|
Re: Einfügen der neuen Datensätze
@r_kerber: hast recht :oops:
|
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:
mfg
procedure TForm.dbg32KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin .... case key of .... VK_Down: key := 0; .... end; {of case} .... end; eddy |
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:
Grüsse
procedure TForm1.Table1BeforeInsert(DataSet: TDataSet);
begin abort; end; 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