AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memtable übernimmt werte nicht?

Ein Thema von Nine9 · begonnen am 13. Okt 2022 · letzter Beitrag vom 13. Okt 2022
Antwort Antwort
Nine9

Registriert seit: 1. Dez 2021
45 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Memtable übernimmt werte nicht?

  Alt 13. Okt 2022, 13:17
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 );
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
374 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Memtable übernimmt werte nicht?

  Alt 13. Okt 2022, 13:31
Ich denke mal, dass Du zu spät das Append machst...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 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
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Memtable übernimmt werte nicht?

  Alt 13. Okt 2022, 14:46
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:56 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