Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Unter bestimmten Umständen kein Wert im Edit (https://www.delphipraxis.net/200251-unter-bestimmten-umstaenden-kein-wert-im-edit.html)

franktron 3. Apr 2019 08:45

Unter bestimmten Umständen kein Wert im Edit
 
Ich habe Dynamisch erstellte Numberboxen(FMX) Delphi 10.2.3 mit IDE Fix
Wenn ich Neue Daten eingeben will Sind beim Schreiben keine Daten mehr vorhanden bei Edit geht das aber.

Was kann die Ursache sein.

Hier der Code von neu
Delphi-Quellcode:
SetButtons(1);
  FormHelper.Felder(Self,False,1);
  FormHelper.Felder(Self,True,1);
  IsNew:=True;
  AktGruppenID:=0;
Hier der von Edit

Delphi-Quellcode:
SetButtons(1);
  FormHelper.Felder(Self,True,1);
  IsNew:=False;
Erstellung der Edits
Delphi-Quellcode:
For i:=0 To GruppeQ.Count-1 do
  begin
    Tab:=TTabItem.Create(Self);
    Tab.Parent:=tbc1;
    Tab.Name:='Tab_'+IntToStr(i);
    Tab.Text:=GruppeQ.Items[i].Name;

    label1:=TLabel.Create(Self);
    label1.Parent:=Tab;
    label1.Position.X:=10;
    label1.Position.Y:=10;
    label1.Width:=120;
    label1.Text:='Stundenstatz';
    label1.Name:='Label_S_'+IntToStr(i);

    Edit1:=TNumberBox.Create(Self);
    Edit1.Parent:=Tab;
    Edit1.Position.X:=140;
    Edit1.Position.Y:=10;
    Edit1.Width:=50;
    Edit1.Tag:=1;
    Edit1.ValueType:=TNumValueType.Float;
    Edit1.Name:='Edit_S_'+IntToStr(GruppeQ.Items[i].ID);
  end;
Speichern der Daten
Delphi-Quellcode:
DBAccess1.Gruppe:=AktGruppenID;
    DBAccess1.ID:=AktItemID;
    DBAccess1.Name:=Edit_Name1.Text;
    DBAccess1.Gruppe1:=SummenGr.Items[Combo_GruppenSumme.ItemIndex].ID;

    For i:=0 To DBAccess1.Summen.Count-1 do
    Begin
      Edit:=FindComponent('Edit_S_'+IntToStr(DBAccess1.Summen.Items[i].GSID)) AS TNumberBox;
      if Assigned(Edit) then
      Begin
        DBAccess1.Summen.Items[i].Summe:=Edit.Value;//Hier ist nur bei neu immer 0 drin
      End;
    End;

    if IsNew then
    Begin
      DBAccess1.ID:=0;
      DBAccess1.Neu;
    End
    Else
      DBAccess1.Edit;
    AktItemID:=DBAccess1.Schreiben;

hoika 3. Apr 2019 09:04

AW: Unter bestimmten Umständen kein Wert im Edit
 
Hallo,
nun, das interessante "Schreiben" bzw. "Neu" fehlt.

Was sagt denn der Debugger?
Was genau ist das DBAccess1? (Datentyp?)

franktron 3. Apr 2019 09:07

AW: Unter bestimmten Umständen kein Wert im Edit
 
Zitat:

Zitat von hoika (Beitrag 1429401)
Hallo,
nun, das interessante "Schreiben" bzw. "Neu" fehlt.

Was sagt denn der Debugger?
Was genau ist das DBAccess1? (Datentyp?)

Der Debugger sagt ja gerade 0 bei der Stelle und DBAccess1 ist den DB Kapslung da werden nur SQL Dinge behandelt(z.b. Eine Query zusammen gesetzt).

Delphi.Narium 3. Apr 2019 09:19

AW: Unter bestimmten Umständen kein Wert im Edit
 
Zitat:

Zitat von franktron (Beitrag 1429402)
... und DBAccess1 ist den DB Kapslung da werden nur SQL Dinge behandelt(z.b. Eine Query zusammen gesetzt).

Und genau dadrin könnte der Fehler liegen.

In Neu wird also IsNew auf True gesetzt.
IsNew wird aber vor dem Aufruf von Neu abgefragt, bzw. der Aufruf von Neu erfolgt in Abhängigkeit des Wertes von IsNew.

Das erscheint mir jetzt nicht zwingend so ganz verständlich.

IsNew hat damit wohl immer den Wert des letzten Aufrufes von Neu bzw. Schreiben.

Wird also ein Satz geschrieben, so ist IsNew anschließend False. Soll nun ein Satz neu angelegt werden, so ist IsNew vor dem (gewünschten) Aufruf von Neu noch False und damit wird Neu nicht aufgerufen.

Der Debugger hat mit seiner Aussage also durchaus recht.

Die implementierte Logik erscheint mir überdenkungswürdig.

franktron 3. Apr 2019 09:26

AW: Unter bestimmten Umständen kein Wert im Edit
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1429405)
Zitat:

Zitat von franktron (Beitrag 1429402)
... und DBAccess1 ist den DB Kapslung da werden nur SQL Dinge behandelt(z.b. Eine Query zusammen gesetzt).

Und genau dadrin könnte der Fehler liegen.

In Neu wird also IsNew auf True gesetzt.
IsNew wird aber vor dem Aufruf von Neu abgefragt, bzw. der Aufruf von Neu erfolgt in Abhängigkeit des Wertes von IsNew.

Das erscheint mir jetzt nicht zwingend so ganz verständlich.

IsNew hat damit wohl immer den Wert des letzten Aufrufes von Neu bzw. Schreiben.

Wird also ein Satz geschrieben, so ist IsNew anschließend False. Soll nun ein Satz neu angelegt werden, so ist IsNew vor dem (gewünschten) Aufruf von Neu noch False und damit wird Neu nicht aufgerufen.

Der Debugger hat mit seiner Aussage also durchaus recht.

Die implementierte Logik erscheint mir überdenkungswürdig.

Das ist gerade das komische die Komponenten die ich zur Desingtime angelegt haben gehen alle, und das Porblem besteht schon vor if IsNew then ....
nämlich hier

Delphi-Quellcode:
For i:=0 To DBAccess1.Summen.Count-1 do
    Begin
      Edit:=FindComponent('Edit_S_'+IntToStr(DBAccess1.Summen.Items[i].GSID)) AS TNumberBox;
      if Assigned(Edit) then
      Begin
        DBAccess1.Summen.Items[i].Summe:=Edit.Value; <--- Hier ist der Wert 0 und z.b. 10 wie eingegeben
      End;
    End;
Hab ich vielleicht beim Create was falsche gemacht

Delphi.Narium 3. Apr 2019 09:46

AW: Unter bestimmten Umständen kein Wert im Edit
 
Erstellen der Edits:
Delphi-Quellcode:
 Edit1.Name:='Edit_S_'+IntToStr(GruppeQ.Items[i].ID);

Suchen der Edits:
Delphi-Quellcode:
 Edit:=FindComponent('Edit_S_'+IntToStr(DBAccess1.Summen.Items[i].GSID))


Sind .ID und .GSID immer gleich? Warum überhaupt dieser Unterschied?
Beabsichtigt oder Schreibfehler oder ...?

Sorry, aber die gezeigten Fragmente reichen nicht annähernd aus, um irgendeine sinnvolle Hilfestellung geben zu können.

franktron 3. Apr 2019 10:12

AW: Unter bestimmten Umständen kein Wert im Edit
 
Danke euch alle hab den Fehler gefunden lag tatsächlich in der DB Schicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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