Thema: Delphi dBase Dateiendungen

Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.490 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: dBase Dateiendungen

  Alt 31. Jan 2006, 10:54
Na, dann musst Du ein zweites, identisches Table-Objekt erstellen. Dann kopierst Du die Daten vom erst in das zweite, am besten über ein Variant-Array. Danach löschst Du die erste Tabelle und benennst die zweite um - natürlich inkl. aller Memo- und Indexdateien.

Hier mal ein Beispiel für das reine Kopieren, es sollte kein Problem sein, das auf normale TTable-Objekte umzustellen:
Delphi-Quellcode:
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat