![]() |
Lazarus DBGrid Eintrag
Guten Tag,
Ich bin neu in diesem Forum und auch was das Programmieren angeht da ich eine Umschulung angefangen habe und mit Lazarus(2.2.4) Arbeite. Derzeit Programmiere ich einen Gaszähler mit MariaDB-10 und einem DBGrid, leider bekomme ich es aber nicht hin das mein Neu Eingetragener Wert ("Neu" im DBGrid) dann als Alter Stand in der nächen Reihe Eingetragen wird ("Stand" im DBGrid). Mein Code ist leider noch nicht so Gut/schön da ich noch reltiv am Anfang stehe. :lol: Über Hilfe würde ich micht sehr freuen. (Bild vom DBGrid Häng ich einfach mal an Genau wie den Code der bisher Zum Füllen des DBGrids Zuständig ist) ![]() ![]() Mein Bisheriger Code:
Code:
MFG
//------------------------------------------------------------------------------
// SQL Table füllen (DBGrid) //------------------------------------------------------------------------------ begin with DB_Query_Eintragen do begin Application.ProcessMessages; Close; SQL.Clear; SQL.Text:='select * from daten'; ExecSQL; Active:=True; Edit; Last; zStand:=FieldByName('Stand').AsInteger; Append; //FieldByName('Stand').AsInteger:=FieldByName('Neu').AsInteger; FieldByName('Datum').AsDateTime:=Date; FieldByName('Zeit').AsString:=TimeToStr(Time); FieldByName('Name').AsString:=CbB_Name.Text; DB_Query_Eintragen.FieldByName('Stand').AsVariant:=0; x:=StrToInt(LbE_Zaehler.Text); FieldByName('Neu').AsVariant:=(x); y:=x-zStand; FieldByName('Neu').AsVariant:=StrToInt(LbE_Zaehler.Text); FieldByName('Verbrauch').AsVariant:=IntToStr(y); Post; Table_Daten.Refresh; Close; end; end; end; |
AW: Lazarus DBGrid Eintrag
Delphi-Quellcode:
Habe mal deinen Quelltext etwas überarbeitet und kommentiert, keine Ahnung, ob dadurch dein Problem gelöst werden kann.
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;
Delphi-Quellcode:
nutze ich nur, wenn ich den Datentyp nicht kenne.
.AsVariant
Wenn x ein Integer ist, ist eine Zuweisung der Art
Delphi-Quellcode:
, nicht zwingend sinnvoll, da ist
.AsVariant := x
Delphi-Quellcode:
bessert, dito. natürlich auch für Strings, ...
.AsInteger := x
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
Delphi-Quellcode:
entfallen, da dadurch die Datenmenge geschlossen wird und damit keine Anzeige im DBGrid möglich ist.
DB_Query_Eintragen.Close;
|
AW: Lazarus DBGrid Eintrag
Vielen Dank Für deine Hilfe und die Tipps mit der Zuweisung,
Ich werde es Gleich Testen und ein Feedback geben. Das DBGrid ist derzeit mit der DataSource (Unter Eigenschaften) Verbunden ( Ich häng mal ein Screenshot und den Gesamten Komponenten auf dem Desinger an :-D) ![]() ![]() Hier mal der Komplett Code.
Code:
MFG Davidvar x : Integer; y : Integer; zStand : Integer; begin //------------------------------------------------------------------------------ //Zählerstand darf nicht Leer sein! //------------------------------------------------------------------------------ begin if (LbE_Zaehler.Text='') then begin ShowMessage('Bitte Zählerstand Eintragen.'); end; end; //------------------------------------------------------------------------------ // ComboBox mit namen Darf nicht Frei Sein! //------------------------------------------------------------------------------ begin if (CbB_Name.Text='') then begin ShowMessage('Bitte Namen Auswählen.'); end; end; //------------------------------------------------------------------------------ // SQL Table füllen (DBGrid) //------------------------------------------------------------------------------ begin with DB_Query_Eintragen do begin Application.ProcessMessages; Close; SQL.Clear; SQL.Text:='select * from daten'; ExecSQL; Active:=True; Edit; Last; zStand:=FieldByName('Stand').AsInteger; Append; //FieldByName('Stand').AsInteger:=FieldByName('Neu').AsInteger; FieldByName('Datum').AsDateTime:=Date; FieldByName('Zeit').AsString:=TimeToStr(Time); FieldByName('Name').AsString:=CbB_Name.Text; DB_Query_Eintragen.FieldByName('Stand').AsVariant:=0; x:=StrToInt(LbE_Zaehler.Text); FieldByName('Neu').AsVariant:=(x); y:=x-zStand; FieldByName('Neu').AsVariant:=StrToInt(LbE_Zaehler.Text); FieldByName('Verbrauch').AsVariant:=IntToStr(y); Post; Table_Daten.Refresh; Close; end; end; end; |
AW: Lazarus DBGrid Eintrag
Ich hab es jetzt Getestet und es Funktioniert Einwandfrei.
Also Nochmal Vielen Dank für deine Hilfe Delphi.Narium. :-D :thumb: |
AW: Lazarus DBGrid Eintrag
Moin...8-)
Zitat:
|
AW: Lazarus DBGrid Eintrag
Moin :)
Zitat:
|
AW: Lazarus DBGrid Eintrag
Zitat:
Wenn du das wirklich lernen willst, nehme ich mir die Zeit dir die Fehler, unabhängig von der Funktion, in deinem Code zu erklären. Sag Bescheid...:wink: Bitte lade mal das komplette Projekt als ZIP hoch. :wink: PS: Wenn du das durchgearbeitet hast, siehst du selbst einige Fehler. :zwinker: ![]() PS: Bilder bitte nicht als Link sondern als Anhang direkt hier anhängen. |
AW: Lazarus DBGrid Eintrag
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das Angebot würde ich sehr gerne Annehmen, Ich möchte es Richtig Lernen und später auch Richtig und Sauber Umsetzen können. Vielen Dank schonmal :) Zitat:
Zitat:
Projekt hab ich mit Angehangen |
AW: Lazarus DBGrid Eintrag
Hallöle...8-)
Ich werde dein Projekt mal mit Anmerkungen versehen. Da ich auch arbeiten muß, klappt das nicht gleich. :wink: Wenn du das durchgearbeitet hast, stellt du das Ergebnis mal hier online. (ZIP) PS: Auf den ersten Blick ist dein Code nicht so schlimm. :thumb: Du hast aber mindestens 3 Logicfehler drin. Stichwort: Btn_EintragenClick(Sender: TObject). Schau dir das mal genauer an. :wink: |
AW: Lazarus DBGrid Eintrag
Okay mach ich :D
Bin schon dabei, könnte gegeben falls bei mir aber auch noch ein Moment Dauern :lol: Oh Danke ich schau mir das gleich mal an und guck ob ich die Logikfehler direkt finde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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