Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lazarus DBGrid Eintrag (https://www.delphipraxis.net/211820-lazarus-dbgrid-eintrag.html)

xDdaviiDxD 7. Nov 2022 10:25

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)

https://s20.directupload.net/images/221107/xv6rlpso.png


Mein Bisheriger Code:
Code:
//------------------------------------------------------------------------------
// 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;
MFG

Delphi.Narium 7. Nov 2022 20:42

AW: Lazarus DBGrid Eintrag
 
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.

Delphi-Quellcode:
.AsVariant
nutze ich nur, wenn ich den Datentyp nicht kenne.

Wenn x ein Integer ist, ist eine Zuweisung der Art
Delphi-Quellcode:
.AsVariant := x
, nicht zwingend sinnvoll, da ist
Delphi-Quellcode:
.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
Delphi-Quellcode:
DB_Query_Eintragen.Close;
entfallen, da dadurch die Datenmenge geschlossen wird und damit keine Anzeige im DBGrid möglich ist.

xDdaviiDxD 8. Nov 2022 11:05

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)

https://s20.directupload.net/images/221108/9vbeyuh4.png

Hier mal der Komplett Code.

Code:

var
   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;
MFG David

xDdaviiDxD 8. Nov 2022 11:49

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:

haentschman 8. Nov 2022 13:25

AW: Lazarus DBGrid Eintrag
 
Moin...8-)
Zitat:

da ich eine Umschulung angefangen habe und mit Lazarus(2.2.4) Arbeite
Ist das dein privater Code oder hat das dir der Lehrer so erklärt? :gruebel:

xDdaviiDxD 9. Nov 2022 07:23

AW: Lazarus DBGrid Eintrag
 
Moin :)

Zitat:

Ist das dein privater Code oder hat das dir der Lehrer so erklärt? :gruebel:
Das hat mir mein Chef in meinem Praktikum mit so erklärt. :-D

haentschman 9. Nov 2022 07:34

AW: Lazarus DBGrid Eintrag
 
Zitat:

Das hat mir mein Chef in meinem Praktikum mit so erklärt
...sei nicht böse...aber oh mein Gott. :shock:

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:
https://www.delphi-treff.de/object-pascal/styleguide/

PS:
Bilder bitte nicht als Link sondern als Anhang direkt hier anhängen.

xDdaviiDxD 9. Nov 2022 09:28

AW: Lazarus DBGrid Eintrag
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

...sei nicht böse...aber oh mein Gott. :shock:
Nein bin ich nicht Keine Sorge , ich bin für jede Hilfe und jeden Tipp sehr Dankbar. :-D

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:

Wenn du das durchgearbeitet hast, siehst du selbst einige Fehler. :zwinker:
https://www.delphi-treff.de/object-pascal/styleguide/
Wird Gemacht.^^


Zitat:

Bilder bitte nicht als Link sondern als Anhang direkt hier anhängen.
Oh Natürlich wird gemacht. Hätte ich mir auch Denken Können. :s


Projekt hab ich mit Angehangen

haentschman 9. Nov 2022 10:42

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:

xDdaviiDxD 9. Nov 2022 11:29

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 12:51 Uhr.
Seite 1 von 4  1 23     Letzte »    

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