procedure TDdtExec.Batchmove(dbold,
db: TAdsTable);
var iField : integer;
bQueryDeleted : boolean;
aOldFieldIndex :
array of integer;
TempField : TField;
begin
bQueryDeleted := (dbOld.TableType <> ttAdsAdt);
FRecordCount := dbold.RecordCount;
FRecNo := 0;
// Damit in der physikalischen Reihenfolge importiert wird
dbOld.IndexName := '
';
dbOld.First;
// Feldindices der alten Tabelle merken
SetLength(aOldFieldIndex,
db.FieldCount);
for iField := 0
to db.Fields.Count -1
do
begin
TempField := dbold.FindField(
db.Fields[iField].FieldName);
if TempField <>
nil then
begin
aOldFieldIndex[iField] := TempField.
Index;
end
else
begin
aOldFieldIndex[iField] := -1;
end;
end;
while not dbOld.Eof
do
begin
db.Insert;
for iField := 0
to db.Fields.Count -1
do begin
try
// Wenn das Feld in der alten Tabelle vorhanden ist,
// dann dieses übernehmen.
if aOldFieldIndex[iField] > -1
then
db.Fields[iField].Value := dbOld.Fields[aOldFieldIndex[iField]].Value;
except
end;
end;
// Daten speichern
db.Post;
// Status-Anzeige
inc(FRecno);
if assigned(FOnTableProgress)
then
FOnTableProgress(Self, TPSProgress, FRecno);
if bQueryDeleted
and dbOld.AdsIsRecordDeleted(0)
then
// Wenn die Quelldatei DBF ist und der Satz war
// gelöscht, so auch den neuen Satz löschen.
db.Delete;
// Normalfall
dbOld.Next;
end;
// Status-Anzeige
if assigned(FOnTableProgress)
then
FOnTableProgress(Self, TPSEnd, FRecno);
end;