AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lazarus DBGrid Eintrag

Offene Frage von "xDdaviiDxD"
Ein Thema von xDdaviiDxD · begonnen am 7. Nov 2022 · letzter Beitrag vom 30. Nov 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#1

Lazarus DBGrid Eintrag

  Alt 7. Nov 2022, 11:25
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.
Ü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
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: Lazarus DBGrid Eintrag

  Alt 7. Nov 2022, 21: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
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Lazarus DBGrid Eintrag

  Alt 8. Nov 2022, 12:05
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 )

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

Geändert von xDdaviiDxD ( 8. Nov 2022 um 12:56 Uhr)
  Mit Zitat antworten Zitat
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Lazarus DBGrid Eintrag

  Alt 8. Nov 2022, 12:49
Ich hab es jetzt Getestet und es Funktioniert Einwandfrei.

Also Nochmal Vielen Dank für deine Hilfe Delphi.Narium.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Lazarus DBGrid Eintrag

  Alt 8. Nov 2022, 14:25
Moin...
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?
  Mit Zitat antworten Zitat
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Lazarus DBGrid Eintrag

  Alt 9. Nov 2022, 08:23
Moin

Zitat:
Ist das dein privater Code oder hat das dir der Lehrer so erklärt?
Das hat mir mein Chef in meinem Praktikum mit so erklärt.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: Lazarus DBGrid Eintrag

  Alt 9. Nov 2022, 08:34
Zitat:
Das hat mir mein Chef in meinem Praktikum mit so erklärt
...sei nicht böse...aber oh mein Gott.

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...

Bitte lade mal das komplette Projekt als ZIP hoch.

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

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

Geändert von haentschman ( 9. Nov 2022 um 08:38 Uhr)
  Mit Zitat antworten Zitat
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Lazarus DBGrid Eintrag

  Alt 9. Nov 2022, 10:28
Zitat:
...sei nicht böse...aber oh mein Gott.
Nein bin ich nicht Keine Sorge , ich bin für jede Hilfe und jeden Tipp sehr Dankbar.

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.
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
Angehängte Dateien
Dateityp: zip DB_Gaszähler.zip (581,8 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

AW: Lazarus DBGrid Eintrag

  Alt 9. Nov 2022, 11:42
Hallöle...

Ich werde dein Projekt mal mit Anmerkungen versehen. Da ich auch arbeiten muß, klappt das nicht gleich. Wenn du das durchgearbeitet hast, stellt du das Ergebnis mal hier online. (ZIP)

PS:
Auf den ersten Blick ist dein Code nicht so schlimm. Du hast aber mindestens 3 Logicfehler drin. Stichwort: Btn_EintragenClick(Sender: TObject). Schau dir das mal genauer an.
  Mit Zitat antworten Zitat
xDdaviiDxD

Registriert seit: 1. Nov 2022
Ort: Sachsen-Anhalt
16 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Lazarus DBGrid Eintrag

  Alt 9. Nov 2022, 12:29
Okay mach ich
Bin schon dabei, könnte gegeben falls bei mir aber auch noch ein Moment Dauern

Oh Danke ich schau mir das gleich mal an und guck ob ich die Logikfehler direkt finde.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 Uhr.
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