Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

AW: Memtable übernimmt werte nicht?

  Alt 13. Okt 2022, 13:44
nicht nur das

Soll es nun Edit oder Append/Insert oder AutoEdit sein?



Delphi-Quellcode:
  FDMemTable1.edit; // explizites Edit, im ersten Durchlauf und dann Append ... warum nicht hier auch append?
  while not TBLQuery.Eof do
  begin
    for i2 := 0 to TBLQuery.fields.count - 1 do
    begin
      for i := 0 to FDMemTable1.fields.count - 1 do
      begin
        if TBLQuery.fields[i2].FieldName = FDMemTable1.fields[i].Name then
        begin
          FDMemTable1.fields[i].value := TBLQuery.fields[i2].value; // AutoEdit ab zweiter Runde, weil zuletzt NEXT und somit kein Edit aktiv
        end;
      end;
    end;
    FDMemTable1.Append; // AutoPost, weil schon im Edit/AutoEdit war .... oder Cancel, wenn kein AutoPost
    TBLQuery.Next; // [edit nee doch nicht, weil anderes query]-------Insert/Apend wird abgebrochen, oder leerer Datensatz wenn AutoPost-----
  end;
       FDMemTable1.Post; // es gibt nie etwas zum Speichern (außer EOF bricht schon vom ersten Durchlauf ab)
Wenn AutoPost aus ist, dann wird im Apppend&Next ein Cancel gemacht und die Änderungen verworfen

und ohne AutoEdit knallt es in der zweiten Runde, beim Versuch der Zuweisung. (wegen dem Next)




ALSO:

Wozu Append danach?
das letzte Append + Post ergibt einen leeren Datensatz

Kein Edit, vor der inneren Schleife ein Append und danach ein Post. (das Post nur nach allen schleifen, wenn wirklich mit AutoPost=True, aber warum auf was unsicheres verlassen, anstatt gleich richtig explizit)




Natürlich verbietet dir niemand den Debugger zu benutzen und selbst nachzusehen, mit FDMemTable1.State und FDMemTable1.RecordCount in den überwachten Ausdrücken.


Zitat:
if TBLQuery.fields[i2].FieldName = FDMemTable1.fields[i].Name then
Hier dachte ich erst, dass i und i2 vertauscht wären.
nach Dreimaligem hinsehn gemerkt, dass es nur so aussah. (wäre bestimmt bissl übersichticher, wenn es in der gleichen Reihefolge wäre, wie die Zuweisung danach, aber egal)

Aber wirklich .Name oder nicht doch vielleicht .FieldName ?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Okt 2022 um 13:58 Uhr)
  Mit Zitat antworten Zitat