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 ?