如何确定DBGRID里面的记录
能够实现循环读出每条记录里的内容前面我采用了dbgrid.Columns[i].fieldname 来读出字段名
但底下的记录不知道用什么语句使它们读出。

解决方案 »

  1.   

    使用数据集如:adoquery1.Fields[j].AsString
      

  2.   

    DBGrid连接的是DataSource,DataSource有DataSet。DBGrid里的数据都是从DataSet来的。
    循环DataSet即可。
    AssignFile(ff,"d:\test.txt"); //文件操作
    Rewrite(ff);                  //重写
    DataSet.First;                //移动指针
    while not DataSet.Eof do begin
      for i := 0 to DataSet.Fields.Count - 1 do begin
        Write(ff,DataSet.FieldValues[i].AsString);
        Write(ff,#9);  //加入TAB
      end;
      Write(ff,#13#10); //加入回车换行
    end;
    CloseFile(ff);
      

  3.   

    按 yjs_lh(长风浪子) 做,没错。
      

  4.   

    function ChangetoText(TextForm:Tform;Query1:TQuery;title:string;summary:string): Boolean;
    var
      I: integer;
      FName,OutString: string;
      OutFile: TextFile;
      note: Tbook;
      savedialog1: Tsavedialog;
    begin
       //创建对话框的容器
     try
      savedialog1 := Tsavedialog.Create(TextForm);
      //Assign a filename to the variable
      savedialog1.Filter := 'Text files (*.txt)|*.TXT';
      if savedialog1.Execute then
        FName := savedialog1.FileName+'.txt';
      if FName <> '' then
        begin
          note := Query1.GetBook;
          Query1.DisableControls;  //Identify the filename and type as OutFile
         AssignFile(OutFile,fname);  //create and open a new file identify as OutFile
         Rewrite(OutFile);  //插入标题
         OutString := title+#13;
         Writeln(OutFile,OutString);
         OutString := '';  //Get text from the Query1
         for I:=0 to Query1.FieldCount-1 do
          begin
           if query1.Fields[i].Visible = True then
           begin
            OutString:=OutString+Query1.Fields[i].displaylabel;
            if I < Query1.FieldCount-1 then
              OutString := OutString + ','
            else outstring := Outstring;
           end;
          end;
        Writeln(OutFile,OutString);
        OutString := '';    While not Query1.EOF do
         begin
          for I:=0 to Query1.FieldCount-1 do
           begin
            if query1.Fields[i].Visible = True then
            begin
             OutString:=OutString+'"'+Query1.Fields[i].AsString+'"';
             if I < Query1.FieldCount-1 then
              OutString := OutString + ','
             else outstring := Outstring ;
            end;
           end;
      //Write out the text in OutString to file
          Writeln(OutFile,OutString);
          Query1.Next;
          OutString := '';
         end;   //插入总结
         Writeln(OutFile,summary);
      //Update and close the file
         CloseFile(OutFile);
         Query1.EnableControls;
         Query1.GotoBook(note);
         Query1.FreeBook(note);
         savedialog1.Destroy;
         result := True;
       end;
      except
       CloseFile(OutFile);
       Query1.EnableControls;
       Savedialog1.free;
       Showmessage('过程错误,请退出后重新运行!');
       Result := False;
      end;
    end;
      

  5.   

    var 
    str1:tstrings;
    i:integer;
    begin
       query1.close;
       query1.sql.clear;
       query1.sql.add('select * from table1');
       query1.open;
       str1:=tstringlist.create;
       for i:=1 to query1.recordcount do 
       begin
     str1.add(query1.FieldByName('你要导出的字段').Value+query1.FieldByName('你要导出的字段').Value+...);
        query1.next;
       end;
      str1.savetofile('*******')
    end;
      

  6.   

    var    memo:Tstrings;
           Book:tBook;
           s:widestring;
           i,j:integer;
            
     begin
          memo:=tstringlist.Create;
          DBGrid.DataSource.DataSet.DisableControls;
          Book:=DBGrid.DataSource.DataSet.GetBook;
          FDBGrid.DataSource.DataSet.First;
          while not FDBGrid.DataSource.DataSet.Eof do
            begin
              s:='';
              for i:=0 to FDBGrid.Columns.Count-1 do if FDBGrid.Columns[i].Visible then
                 s:=s+'|'+FDBGrid.DataSource.DataSet.fieldbyname(FDBGrid.Columns[i].FieldName).AsString;
              memo.Append(s);
              FDBGrid.DataSource.DataSet.Next;
            end;
          DBGrid.DataSource.DataSet.GotoBook(Book);
          DBGrid.DataSource.DataSet.EnableControls;
          memo.savetofile('c:\ss.txt');
        end;
      

  7.   

    var    memo:Tstrings;
           Book:tBook;//标签
           s:widestring;
           i,j:integer;
            
     begin
          memo:=tstringlist.Create;
          DBGrid.DataSource.DataSet.DisableControls;//屏蔽DBGrid与dataset连接
          Book:=DBGrid.DataSource.DataSet.GetBook; //标注当前纪录位置
          FDBGrid.DataSource.DataSet.First; //移到第一条纪录
          while not FDBGrid.DataSource.DataSet.Eof do //如果到最后退出
            begin
              s:='';
              for i:=0 to FDBGrid.Columns.Count-1 do if FDBGrid.Columns[i].Visible then
                 s:=s+'|'+FDBGrid.DataSource.DataSet.fieldbyname(FDBGrid.Columns[i].FieldName).AsString; //当前纪录增加到s用'|'隔开字段
              memo.Append(s);//将s追加到memo
              FDBGrid.DataSource.DataSet.Next;
            end;
          DBGrid.DataSource.DataSet.GotoBook(Book); //返回原来纪录
          DBGrid.DataSource.DataSet.EnableControls; //恢复连接
          memo.savetofile('c:\ss.txt'); //保存到文件
        end;
      

  8.   

    可以实现,但由于字段长度不同要考虑到折行问题,不是几行代码可以解决的!
    难道你要让客户看txt文件。
      

  9.   

    在txt文件里看还不如在dbgrid里看方便呢?
    如果需要打印出来,你可以用我的控建!
    下载地址:http://www.csdn.net/cnshare/soft/15/15471.shtm
      

  10.   

    {///.功能:数据结果导出到Txt文件}
    procedure DataToTxt(FileName,pCaption:string;var pTitle:TstringList;pDBGrid:TDBGrid);
    var
      MyFile: TextFile;
      FileCaption:String;
      FileTitle:TStringList;
      DBGrid1:TDBGrid;
      i,j: integer;
    begin
      FileCaption:=pcaption;
      FileTitle:=pTitle;
      DBGrid1:=pDBGrid;
      if ExtractFileExt(uppercase(Filename))<> '.TXT' then
      Filename := ChangeFileExt(Filename, '.TXT');
      AssignFile(MyFile, Filename);
      Rewrite(MyFile);
      try
        //表头内容
        writeln(MyFile,FileCaption);
        if FileTitle.Count>0 then
          for i:=0 to FileTitle.Count-1 do
          begin
            writeLn(MyFile,FileTitle.Strings[i]);
          end
        else
          i:=1;
        //获取字段名
        j:=i+2;
        for i:=0 to DBGrid1.Columns.Count-1 do
        begin
          Write(MyFile,DBGrid1.Columns[i].Title.Caption);
          ///作为字段分隔符
          Write(MyFile,'|');
          j:=j;
        end;
        Writeln(MyFile);
        //表体内容
        j:=j+1;
        DBGrid1.DataSource.DataSet.DisableControls;
        DBGrid1.DataSource.DataSet.First;
        while not DBGrid1.DataSource.DataSet.Eof do
        begin
          For i:=0 to DBGrid1.Columns.Count-1 do
          begin
            Write(MyFile,DBGrid1.DataSource.DataSet.FieldByName(DBGrid1.Columns[i].FieldName).AsString);
            ///作为字段分隔符
            Write(MyFile,'|');
          end;
          WriteLn(Myfile);
          DBGrid1.DataSource.DataSet.Next;
          j:=j+1;
        end;
        DBGrid1.DataSource.DataSet.EnableControls;
        CloseFile(MyFile);
        Application.MessageBox('数据导出完毕','商务管理系统',MB_ICONQUESTION+MB_OK);
      except
        ////
      end;
    end;
      

  11.   

    用dxdbgrid控件吧
    很容易实现另存为Txt, excel, html等多种文件