Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi DBGrid Zeile in AfterScroll Ereignis erzeugen (https://www.delphipraxis.net/194305-dbgrid-zeile-afterscroll-ereignis-erzeugen.html)

Luca Haas 7. Nov 2017 14:21

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:
   
AufgabenVorlagenQuery.Close;
AufgabenVorlagenQuery.SQL.Text := ('SELECT * FROM AufgabenVorlagen WHERE AufgabenMusterID = ' + AufgabenMusterQuery.FieldByName('ID').AsString + ' ORDER BY Position ASC');
AufgabenVorlagenQuery.Open;
Weiß jemand wie ich es hinbekomme, dass die ID sofort eingesetzt wird und nicht erst mit dem Speichern?

mkinzler 7. Nov 2017 14:23

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Setzte das Feld auf "NULL". Dann sollte es funktionieren.

Luca Haas 7. Nov 2017 14:25

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Wie genau setze ich denn ein Feld auf null ?

Uwe Raabe 7. Nov 2017 14:30

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Delphi-Quellcode:
AufgabenMusterQuery.FieldByName('ID').Clear;

Luca Haas 7. Nov 2017 14:39

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.

Uwe Raabe 7. Nov 2017 14:42

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?

nahpets 7. Nov 2017 14:52

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.

Luca Haas 7. Nov 2017 14:59

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Okay ich habe das Problem gelöst, indem ich den Fehler umgangen habe
Delphi-Quellcode:
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;
ich sage einfach, er soll nur ins AfterScroll Ereignis gehen, wenn er nicht im Bearbeitungsmodus ist

Uwe Raabe 7. Nov 2017 15:07

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Zitat:

Zitat von Luca Haas (Beitrag 1385505)
ich sage einfach, er soll nur ins AfterScroll Ereignis gehen, wenn er nicht im Bearbeitungsmodus ist

Dann wäre diese Abfrage besser geeignet:

Delphi-Quellcode:
if (AufgabenMusterQuery.State in [dsInactive, dsBrowse]) then

Luca Haas 7. Nov 2017 15:09

AW: DBGrid Zeile in AfterScroll Ereignis erzeugen
 
Okay, dann ändere ich das noch, danke schön


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Seite 1 von 2  1 2      

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