Delphi - Tetszőleges szerkezetű adattábla exportálása TXT-be

forráskód letöltése
A TExportTxt komponens segítségével egy tetszőleges típusú és szerkezetű adattáblát exportálhatunk TXT formátumba mindössze egy dupla kattintással. A mellékelt példaprogram megnyitása előtt az ExportTxt.pas-ban lévő komponenst telepítenie kell a Delphi alá. További szükséges előkészület, hogy létre kell hozni egy ASDSO0310 nevű aliast, mely arra a könyvtárra kell hogy mutasson, ahová a mellékelt példát másolta.

A komponens használatához a DataSet property-ben válasszuk ki az exportálandó adatforrást, például egy TTable komponenst.

A TxtFile property-be pedig adjunk meg egy txt állomány nevet, szükség esetén elérési útvonallal együtt. Ha már létező állományt adunk meg, az felülírásra kerül.

Az exportálást a komponens Execute eljárásának meghívásával kezdeményezhetjük, vagy akár szerkesztési időben is elvégezhetjük, ha a komponensen jobb gombbal történő kattintás után megjelenő menüből az Execute menüpontot választjuk, vagy ha csak egyszerűen duplán kattintunk a komponensre.

Az exportálást megvalósításához egy TBatchMove komponenst használunk fel, melyet futási időben hozunk létre. Mivel a TBatchMove képes elvégezni azt a feladatot, hogy egyik TTable-ból egy másik TTable komponensben megadott adatforrás között mozgassa a rekordokat, így a feladat könnyen elvégezhető. Mivel a TTable komponensnél lehetőségünk van arra is, hogy TXT állományt kezeljünk adattáblaként, így ennek létrehozása sem okoz nehézséget. Ehhez csupán a TableType property-t kell ttASCII értékre állítanunk. A létrehozott TBatchMove komponensnél a DataSet property-ben megadott adattáblát állítjuk be forrásként, míg a cél a létrehozott TTable komponens lesz, mely a TXT állományt fogja kezelni. Mivel a TBatchMove-nál a Mode property értékét batCopy-ra választottuk, így az adatforrás összes eleme másolásra kerül, annak szerkezetével együtt.
procedure TExportTxt.Execute;
var
  table: TTable;
  batchmove: TBatchMove;
begin
  if Assigned(FDataSet) and (FTXTFile<>'') then begin
    table:=TTable.Create(nil);
    batchmove:=TBatchMove.Create(nil);
    with table do begin
      DatabaseName:=FDataSet.DatabaseName;
      TableName:=FTXTFile;
      TableType:=ttASCII;
    end;
    with batchmove do begin
      Source:=FDataSet;
      Destination:=table;
      Mode:=batCopy;
      Execute;
    end;
    batchmove.Free;
    table.Free;
  end;
end;