type 
Tpak=recored
  ENTERTIME:string;
  EXITTIME:string;
  XM:string;
  THINGS:string;
end;var 
  txt:textfile;
  str:string;
  pak:=tpak;
fileassign(txt,'1.log');
while not fileedof(txt) do
begin
  readln(txt,str);//str为一行数据
  strtopak(str,pak);//自定义函数把读到的str转到pak;
  qry.append;
  qry.fieldbyname(ENTERTIME).asstring:=pak.ENTERTIME;
  qry.fieldbyname(EXITTIME).asstring:=pak.EXITTIME;
  qry.fieldbyname(XM).asstring:=pak.XM;
  qry.fieldbyname(THINGS).string:=pak.THINGS;
  qry.post;
end;
  

解决方案 »

  1.   

    //上机验证过的 没考虑纪录中有';'的情况
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Db, DBTables;type
      TForm1 = class(TForm)
        Query1: TQuery;
        btnExport: TButton;
        btnImport: TButton;
        Database1: TDatabase;
        procedure btnExportClick(Sender: TObject);
        procedure btnImportClick(Sender: TObject);
      private    { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
      //我测试用的数据库
      {create table test(id integer,a1 date,a2 char(10),a3 boolean,
      a4 DECIMAL(5,2),a5 NUMERIC(5,3),a6 FLOAT(7,3))}
       //字段为空也考虑了procedure TForm1.btnExportClick(Sender: TObject);
    var
      Txt: TextFile;
      i: integer;
    begin
      assignfile(Txt, '.\aa.log');
      if FileExists('.\aa.log') then
        append(txt)
      else
        rewrite(txt);
      try
        with query1 do
        begin
          close;
          sql.Clear;
          Sql.add('select * from test');
          open;      while not eof do
          begin
            for i := 0 to query1.FieldCount - 1 do
            begin
              write(txt, query1.Fields[i].AsString + ';');
            end;
            writeln(txt);
            next;
          end;
        end;
      finally
        closefile(txt);
      end;end;procedure TForm1.btnImportClick(Sender: TObject);
    var
      s: string;
      stmp: string;
      position: integer;
      txt: textfile;
    //  ifield: integer;
      i: integer;
    begin  if not FileExists('.\aa.log') then
      begin
        messagebox(0, pchar('日志丢失了!'), pchar('出错了'), MB_OK + MB_ICONERROR);
        exit;
      end;
      query1.Close;
      query1.SQL.clear;
      query1.SQL.Add(' select * from test where 1=0');
      query1.RequestLive := true;
      query1.Open;  assignfile(txt, '.\aa.log');
      try
        reset(txt);    while not eof(txt) do
        begin
          readln(txt, s);
          Position := pos(';', s);
          query1.Append;
          for i := 0 to query1.FieldCount - 1 do
          begin
            stmp := copy(s, 1, Position - 1);
            if trim(stmp) <> '' then
              query1.Fields[i].asstring := stmp;
            s := copy(s, position + 1, length(s));
            Position := pos(';', s);
          end;      query1.Post;
        end;
      finally
        closefile(txt);
      end;end;end.
      

  2.   

    首先我非常感谢老鬼兄,我想知道你的email,可否以后我在邮件里面向你请教
      

  3.   

    [email protected]
    关于;
    一是把字段里的‘;‘转义就象c里面用'\;'表示 控制起来太麻烦;
    2
    用tab键把数据库里的tab字符换为空格