Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#2

AW: Lazarus DBGrid Eintrag

  Alt 7. Nov 2022, 20:42
Delphi-Quellcode:
begin
   // Bisherige Abfrage schließen.
  DB_Query_Eintragen.Close;
  // Neues Statement zuweisen.
  // Ohne Order By ist die Reihenfolge eher zufällig.
  // Eventuell select * from daten order by Datum, Zeit?
  DB_Query_Eintragen.SQL.Text := 'select * from daten';
  // Abfrage öffnen
  DB_Query_Eintragen.Open;
  // Zum letzten Satz gehen, ohne Order By nicht zwingend der höchste, Stand,
  // das neueste Datum, sondern nur das, was die Datenbank zufällig als Letztes liefert.
  DB_Query_Eintragen.Last;
  // Berechnungen durchführen
  // Der Wert von Neu aus dem letzten Datensatz wird im neuen Datensatz der Wert für Stand.
  zStand := DB_Query_Eintragen.FieldByName('Neu').AsInteger;
  xZaehlerstand := StrToInt(LbE_Zaehler.Text);
  yVerbrauch := xZaehlerstand - zStand;
  // neuen Datensatz einfügen und Werte zuweisen
  DB_Query_Eintragen.Append;
  DB_Query_Eintragen.FieldByName('Datum').AsDateTime := Date;
  // Warum Datum als TDateTime und Zeit als String?
  DB_Query_Eintragen.FieldByName('Zeit').AsString := TimeToStr(Time);
  // oder DB_Query_Eintragen.FieldByName('Zeit').AsDateTime := Time;
  DB_Query_Eintragen.FieldByName('Name').AsString := CbB_Name.Text;
  DB_Query_Eintragen.FieldByName('Stand').AsInteger := zStand;
  DB_Query_Eintragen.FieldByName('Neu').AsInteger := xZaehlerstand;
  DB_Query_Eintragen.FieldByName('Verbrauch').AsInteger := yVerbrauch;
  // und Daten speichern.
  DB_Query_Eintragen.Post;
  // Abfrage schließen.
  DB_Query_Eintragen.Close;
  // Welcher Zusammenhang besteht zwischen
  // der Abfrage DB_Query_Eintragen, Table_Daten und dem DBGrid?
  Table_Daten.Refresh;
end;
Habe mal deinen Quelltext etwas überarbeitet und kommentiert, keine Ahnung, ob dadurch dein Problem gelöst werden kann.

.AsVariant nutze ich nur, wenn ich den Datentyp nicht kenne.

Wenn x ein Integer ist, ist eine Zuweisung der Art .AsVariant := x , nicht zwingend sinnvoll, da ist .AsInteger := x bessert, dito. natürlich auch für Strings, ...

Mit welcher Datenbankkomponente ist das DBGrid verbunden? Mit DB_Query_Eintragen oder mit Table_Daten. Welche Daten enthält überhaupt Table_Daten?

Sollte das DBGrid mit DB_Query_Eintragen verbunden sein, muss DB_Query_Eintragen.Close; entfallen, da dadurch die Datenmenge geschlossen wird und damit keine Anzeige im DBGrid möglich ist.
  Mit Zitat antworten Zitat