![]() |
DBGrid Zeile in AfterScroll Ereignis erzeugen
Hi Leute,
wie im Titel schon gesagt, habe ich ein DBGrid, für das es ein AfterScroll-Ereignis, welches die ID abfragt, gibt. Daher habe ich jetzt das Problem, dass ich, jedes Mal eine Fehlermeldung bekomme, wenn ich eine neue Zeile in die Datenbank einfügen will, da die ID erst mit dem Speichern der Zeile eingefügt wird.
Delphi-Quellcode:
Weiß jemand wie ich es hinbekomme, dass die ID sofort eingesetzt wird und nicht erst mit dem Speichern?AufgabenVorlagenQuery.Close; AufgabenVorlagenQuery.SQL.Text := ('SELECT * FROM AufgabenVorlagen WHERE AufgabenMusterID = ' + AufgabenMusterQuery.FieldByName('ID').AsString + ' ORDER BY Position ASC'); AufgabenVorlagenQuery.Open; |
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Setzte das Feld auf "NULL". Dann sollte es funktionieren.
|
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Wie genau setze ich denn ein Feld auf null ?
|
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Delphi-Quellcode:
AufgabenMusterQuery.FieldByName('ID').Clear;
|
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Jetzt bekomme ich beim Start die Fehlermeldung, dass die Datenmenge weder im Editier-noch im Einfügemodus ist.
Und wenn ich jetzt eine Zeile hinzufügen will erhalte ich die Nachricht, dass ich das Feld ID nicht verändern kann. |
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Sieht aus, als müsstest du dein Problem etwas deutlicher erläutern.
Was hast du vor? Was tust du? Was geht nicht? |
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
1. Wie ist das Feld in der Datenbank definiert?
2. Vor dem Ändern eines Wertes: Dataset.Edit 3. Nach dem Ändern eines Werte: DataSet.Post Datensätze, die man zur Laufzeit in 'nem DBGrid einfügt und deren Werte erst vollständig von der Datenbank gefüllt werden, also z. B. AutoInc-Spalten, Sequenzen, Trigger, die Werte ergänzen ..., kann man erst nach 'nem erneuten Öffnen der Tabelle beschreiben. Vorher gibt es eine Fehlermeldung, die abhängig vom Datenbanktyp, variieren kann. Ebenso sieht man die von der Datenbank vergebenen Werte erst nach 'nem erneuten Lesen der Daten. AutoInc-Spalten kann man (in der Regel) im Programm nicht ändern, weder durch Zuweisen eines Wertes, noch durch Clear ... Manche Datenbanken unterstützen noch ein DataSet.Refresh. Das muss man mit "seiner" Datenbank austesten, verliert dadurch aber sehr schnell die Datenbankunabhängigkeit. |
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Okay ich habe das Problem gelöst, indem ich den Fehler umgangen habe
Delphi-Quellcode:
ich sage einfach, er soll nur ins AfterScroll Ereignis gehen, wenn er nicht im Bearbeitungsmodus ist
procedure THauptForm.AufgabenMusterQueryAfterScroll(DataSet: TDataSet);
begin if not (AufgabenMusterQuery.State in [dsinsert]) then begin AufgabenVorlagenQuery.Close; AufgabenVorlagenQuery.SQL.text := ('SELECT * FROM AufgabenVorlagen WHERE AufgabenMusterID = ' + AufgabenMusterQuery.FieldByName('ID').AsString + ' ORDER BY Position ASC'); AufgabenVorlagenQuery.Open; end; end; |
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Zitat:
Delphi-Quellcode:
if (AufgabenMusterQuery.State in [dsInactive, dsBrowse]) then
|
AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
Okay, dann ändere ich das noch, danke schön
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 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