![]() |
TDBGrid ; Leeren Datensatz bei Post erkennen ?
Hallo,
ich möchte gern verhindern, daß ein User erst einen (zunächst ja leeren) Datensatz in einem Grid (via TDBNavigator) einfügt, in diesen aber nix einträgt und dann posted. Das ergibt nämlich (bei einer unterliegenden Access-DB) eine Exception... Kann ich das schon auf TTable-Ebene prüfen ? Also z.B.
Delphi-Quellcode:
?
if Table1[Feld1]='' or Table1[Feld2]='' then Table1.cancel
Würde ja voraussetzen, dass ich mich darauf verlassen kann, daß die Table1 nach dem Post des Navigators noch den Cursor auf dem eingefügten, aber leergebliebenen Datensatz hat. Oder gibts eine Möglichkeit, insgesamt eine TTAble oder TDBGRid daraufhin zu prüfen,ob irgendwo leere Datensätze sind ? Ich meine, ohne eine Schleife auf alle Datensätze loszujagen ? Irgendein Flag zum Abfragen ?? Wenn der User selbst wieder cancel drückt, bevor er posted, ist ja alles OK. Aber ich würde es schon gern abfangen... Bin für jeden Tip dankbar, hab bislang weder in der Hilfe noch im Forum was ähnlich-klingendes gefunden. Gruss, ST2000 |
Re: TDBGrid ; Leeren Datensatz bei Post erkennen ?
Hallo ST2000
dann sieh Dir doch das Ereignis beforePost von TTable an: Zitat:
|
Re: TDBGrid ; Leeren Datensatz bei Post erkennen ?
OK, aber was prüfe ich dann ?
Muss ich dann im Grid Zelleninhalte prüfen, oder kann ich mich darauf verlassen, daß im Dataset (also hier Table1) der Cursor immer noch auf dem Datensatz = der Grid-Row steht, die ich gerade posten wollte ? Dann würde ich es lieber in der Table1 prüfen (entspricht ja dem Chache-Inhalt, den ich posten will, oder ? Oder den zuletzt abgerufenen Daten, ohne meine Änderungen(Pending Changes?)). Ausserdem wäre es mir am liebsten, das ganze Grid nach Änderungen zu durchforsten, die in leeren Zellen resultieren. Nur fürchte ich Inperformanz mit steigender Datenmenge, wenn ich da durch-iteriere... Der User könnte ja auch eine Zelle leeren, die bisher OK war. Habe schon einen Blick auf
Delphi-Quellcode:
geworfen. Wenn ich die (englische) OH-Beschreibung richtig deute, ist hier DER Wert drin, der durch die (noch ungeposteten) User-Änderungen entsteht.
DBGrid.Columns[x].Field.NewValue
Sehe ich das richtig ? Keine Änderung: TField.NewValue entspricht TField.Value Änderung aufgetreten: TField.NewValue unterscheidet sich von TField.Value Post erfolgt: TField.NewValue entspricht wieder TField.Value, d.h. Value erhält den Wert aus NewValue zugewiesen. Gruss, ST2000 |
Re: TDBGrid ; Leeren Datensatz bei Post erkennen ?
Habs nun so hinbekommen :
Delphi-Quellcode:
Das Feld deptname ist ein Mussfeld, da soll kein Blank erlaubt sein. Hätte auch weitere checken können, aber reicht ja...
procedure Tdlg_100082.DataSource1_100082UpdateData(Sender: TObject);
begin if tbl1.FieldByName('deptname').AsString = '' then begin tbl1.Cancel; tbl1.Edit; end; end; Den tbl1.Edit brauchts, weil anschliessend zum DataSource.UpdateData noch das tbl1.post kommt; gibt sonst eine Exception, dass das DataSet nicht im Edit-Mode ist... Gruss, ST2000 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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-2025 by Thomas Breitkreuz