我用DBGrid 的Savetofile 方法保存成txt文件,在用其loadfromfile 方法加载
他,结果只显示列头。TXT文件中也只有列头,而没有数据。
怎么回事啊?:(

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables, ExtCtrls, DBCtrls;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        Table1: TTable;
        DBGrid1: TDBGrid;
        Button1: TButton;
        SaveDialog1: TSaveDialog;
        DBNavigator1: TDBNavigator;
        Table1ID: TAutoIncField;
        Table1XH: TSmallintField;
        Table1XM: TStringField;
        Table1XB: TStringField;
        Table1NL: TSmallintField;
        Table1SZXB: TStringField;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure DbgridToTxt(source:Tobject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      DbgridToTxt(dbgrid1);
    end;
    procedure Tform1.DbgridToTxt(source:Tobject);
    var
      filename:Textfile;
      Dataset:Tdataset;
      titlestr,valuestr,tempstr:string;
      counter:integer;
    begin
      if (source is Tdbgrid)then
        Dataset:=Tdbgrid(source).DataSource.DataSet
        else
          Dataset:=TDataset(source);
      if ((Dataset.IsEmpty)or(not Dataset.Active))then
        exit else
        begin
          Dataset.DisableControls;
          Dataset.First;
          if savedialog1.Execute then
            begin
              assignfile(filename,savedialog1.FileName);
              rewrite(filename);
              for counter:=0 to Dataset.FieldCount-1 do
              titlestr:=titlestr+char(9)+Dataset.Fields[counter].DisplayLabel;
              titlestr:=trim(titlestr);
              writeln(filename,titlestr);
              while not Dataset.Eof do
                begin
                  valuestr:='';
                  for counter:=0 to Dataset.FieldCount-1 do
                  begin
                    tempstr:=Dataset.Fields[counter].Text;
                    valuestr:=valuestr+char(9)+tempstr;
                  end;
                  valuestr:=trim(valuestr);
                  writeln(filename,valuestr);
                  Dataset.Next;
                end;
                  closefile(filename);
              end;
                  Dataset.EnableControls;
        end;
    end;
                  
    end.