![]() |
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 ); |
AW: Memtable übernimmt werte nicht?
Ich denke mal, dass Du zu spät das Append machst...
|
AW: Memtable übernimmt werte nicht?
nicht nur das
Soll es nun Edit oder Append/Insert oder AutoEdit sein?
Delphi-Quellcode:
Wenn AutoPost aus ist, dann wird im Apppend&Next ein Cancel gemacht und die Änderungen verworfen
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) 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:
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 ? |
AW: Memtable übernimmt werte nicht?
Du weisst aber schon, dass man die Werte automatisiert übertragen kann, oder ? Ich glaube, das ging mit
Code:
mit coStructure kannst sogar die Struktur komplett übernehmen.
FDMemTable1.CopyDataSet(DataSet1, [coStructure, coRestart, coAppend]);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz