Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Memtable übernimmt werte nicht? (https://www.delphipraxis.net/211623-memtable-uebernimmt-werte-nicht.html)

Nine9 13. Okt 2022 13:17

Memtable übernimmt werte nicht?
 
Guten Tag Community ich bekomme leider die Daten die ich abspeichern möchte nicht in die Memtable festgeschrieben.

zuerst möchte ich von der DB Tabelle in die Erste Zeile und dann das erste feld auswählen, danach die der memtable.
Ich vergleiche dann den namen der beiden und wenn diese stimmen sollen die daten gespeichert werden.
mit Showmessage habe ich es getestet und es Funktioniert soweit, Eigentlich.

Sobald ich aber nach den Schleifen mir ein feld ausgeben lassen möchte wird mir ein leerer String zurückgegeben was für mich soviel bedeutet das er doch
nichts festgeschrieben hat.
hat jemand eine idee was ich falsch mache ?
Delphi-Quellcode:
  TBLQuery.Open();

  FDMemTable1.Open();

  FDMemTable1.edit;


  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;

        end;

      end;


    end;
    FDMemTable1.Append;

    TBLQuery.Next;

  end;

       FDMemTable1.Post;
       FDMemTable1.CheckBrowseMode;

       ShowMessage(FDMemTable1.fields[1].asstring );

stifflersmom 13. Okt 2022 13:31

AW: Memtable übernimmt werte nicht?
 
Ich denke mal, dass Du zu spät das Append machst...

himitsu 13. Okt 2022 13:44

AW: Memtable übernimmt werte nicht?
 
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:

Delphi-Quellcode:
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 ?

MyRealName 13. Okt 2022 14:46

AW: Memtable übernimmt werte nicht?
 
Du weisst aber schon, dass man die Werte automatisiert übertragen kann, oder ? Ich glaube, das ging mit

Code:
FDMemTable1.CopyDataSet(DataSet1, [coStructure, coRestart, coAppend]);
mit coStructure kannst sogar die Struktur komplett übernehmen.


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