大家知道dbgrid显示数据
adoconnetion 设置要连接的数据库
adoquery 写sql语句 选择记录行
datasource  把adoquery数据做连接
dbgrid 显示datasource的数据把dbgrid中显示的数据写到文本文件中
可以利用循环//因为知道表格有几列 几行了 就可以利用循环了while not mydbgrid.DataSource.DataSet.Eof do
  begin
    str:='';
    for iCount := 0 to mydbgrid.Columns.Count - 1 do
      str:=str+mydbgrid.Columns.Items[iCount].Field.AsString+' ';
    Writeln(txtfile,str);
    mydbgrid.DataSource.DataSet.Next;
  end;现在反过来 把文本文件中的内容写到dbgrid中 怎么整???我的目的是这样的:导入文本文件内容到dbgrid中,某些列可以修改  
改好之后然后点一个按钮
把dbgrid内容写到相应的数据表中

解决方案 »

  1.   

    根据文件内容对dataset进行添加、修改就可以了
      

  2.   

    根据文件内容对dataset进行添加、修改就可以了???具体怎么整????
      

  3.   

    如果你的文本文件格式清楚的话
    根据文件中的字段,
    先建立dataset的字段,然后根据循环记录对每一个字段赋值,
      

  4.   

    怎么建立dataset的字段那些adoconnection   datasource adoquery的控件还要么?
    要的话 怎么设置??希望知道的大虾们 讲清楚点
     谢谢谢谢 急!!!
      

  5.   

    adoquery不就是dataset吗
    当然要先给adoquery建立字段呀
    然后再给字段赋值
    循环对每一条记录做至于提交数据,可以写sql语句
      

  6.   

    仔细试了试,发现adoquery无法在没有connection的情况下创建dataset,也无法去添加字段,给字段赋值
    楼主,不好意思,一直用bde的query或是clientdataset了,如果真要实现这样的功能,可以用bde的query,或者是用stringgrid,自己手动赋值,提交数据库估计都要写sql了
      

  7.   

    在将dbgrid的数据导入到文本中时,你要在每个字段中间加一个tab值,一般都是这样.
    例如格式如下
    a b c d e
    然后,你用文本的读写函数从文本中读取数据,直到到行尾.
    读出一行,你就按tab作为分隔符,从每行中依次读出a,b,c,d,e再将其对应的值保存在dbgrid的中.
    读到dbgrid的中,其实就是利用它联接的dataset(adoquery,adodataset,adotable)等的数据控件实现.
    比如:adoquery1.append;
         adoquery1.fieldbyname('a').value := a;
         ...
         ...
    最后都修改完后,你再用一个按钮做为提交操作.
    这时最好有事务的方式进行,保证数据的一致性.但如果这样的需求要我来做,我会,采用导入按钮(可选择文本文件)将数据load后直接存到数据库中,然后用dbgrid来显示出来.
    有不对的,用修改方式去修改,然后保存.
      

  8.   

    SQL codeDECLARE 
         @Input nvarchar(400)
        ,@Pattern nvarchar(20)SET @Input = N'这是%无___法判断的问题吗这%_%_%%是无法判断的问题吗%__%这是无%法判断的问题吗'SET @Pattern = N'%%_%' --这里如何填才能定位到'%_'呢?SELECT PATINDEX(@Pattern, @Input)
      

  9.   

    http://prj.csdn.net
      

  10.   


    --我给你写一段吧
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
    begin
      str:='select * from ' +
           'opendatasource(''microsoft.jet.oledb.4.0'',''text;hdr=no;database=d:\soft'')...[22#txt]';
      with adoquery1 do
        begin
          close;
          sql.Clear;
          sql.Add(str);
          open;
        end;
    end;end.
      

  11.   

    我把我问题重新说一下吧
    就是我的一个表a(编号,名称,数量,规格)这些字段现在我一个文本文件中 保存的是 编号  数量
    111  1
    112  4
    ...  ...
    ...  ...
    现在要求把文本中数据导入到表格中
    就可以根据编号 把名称规格也显示在表格dbgrid中然后在表格中可以修改数量之后点保存  就把数据插入到表中
      

  12.   

    是用strgrid还是要dbgrid能实现上面的功能要求???
    具体怎么做???
    急急急
      

  13.   

    var
      a, b: TStrings;
      i,j: integer;
    begin
      a := TStringList.Create;
      b := TStringList.Create;
      a.Loadfromfile(filename);//读取文本文件
      for i := 1 to a.count-1 do
      begin
        b.clear;
        b.DelimitedText:= a.Strings[i];
        b.Delimiter := '分隔符';//不知道你的分隔符是什么
        adoquery.append;
        for j := 0 to adoquery.fieldcount-1 do
        begin
          adoquery.fields[i].value := b.strings[j];
        end;
        adoquery.post;
      end; 
      //上面的代码就是从文本文件读出并导入到dataset中,但是要求文本文件的格式和dataset中的字段名是对应的
      //代码没有测试,但是我的意思表达清楚了
      //保存到数据库中的方法,可以直接写sql就行了
    end;
      

  14.   

    我按楼上方法试了一下,文本中的分隔符采用tab(chr(VK_TAB),应该可以。
    编号     数量
    111     1
    112     4 procedure TForm1.Button1Click(Sender: TObject);
    var
      aa: TStringList;
      bb: TStringList;
      i,j: integer;
    begin
      aa := TStringList.Create;
      bb := TStringList.Create;
      aa.LoadFromFile('d:\aa.txt');
      adoquery1.Open;
      for i:=1 to aa.Count-1 do
      begin
        adoquery1.Append;
        bb.Clear;
        bb.DelimitedText := aa.Strings[i];
        bb.Delimiter := chr(VK_TAB);
        for j := 0 to adoquery1.FieldCount-1 do
        begin
          adoquery1.Fields[j].Value := bb.Strings[j];
        end;
      end;
    end;
      

  15.   

    楼上这种方法效率不行,
    在窗体上设置好 adoconnection,adoquery,dbgrid,datasource这关系就好了,直接调用sql语句,
    就可以把文本文件的内容显示在dbgrid中
      

  16.   

    为什么非得用 dbGrid,你用grid或listView不都行嘛!
      

  17.   

    我把我问题重新说一下吧 
    就是我的一个表a(编号,名称,数量,规格)这些字段 现在我一个文本文件中   保存的是   编号     数量 
    111     1 
    112     4 
    ...     ... 
    ...     ... 
    现在要求把文本中数据导入到表格中 
    就可以根据编号   把名称规格也显示在表格dbgrid中 然后在表格中可以修改数量 之后点保存     就把数据插入到表中上面说的 都不能满足我的要求还有就是 都会有插入重复值错误提示!!!另外有个问题  我想
    adoquery2.SQL.Add('select kp_item_no,kp_item_name into #jb_spzl from jb_spzl');先把要导入的数据放在#jb_spzl中  是不是在程序编译完之后 就在数据库中建立了那个临时表我在运行程序时候 提示已经存在那个临时表但是 我在查询分析器中又没有那个临时表
    ????
      

  18.   

    #jb_spzl与当前会话的生命期一样,当前数据库连接不释放,它不会自动删除,你可以在使用完了,手动创建你的问题我想我们给你说的方法已经有了,至于代码需要你自己仔细调试了,提示插入重复值错误,需要看你的主键是怎么设置的,你的文本文件中的记录是不是有重复的。
      

  19.   

    17楼的高手,我想请教一下adoconnection怎么设置联接文本文件呀,多谢
      

  20.   

    to:阿日不是高手,我只是利用sql命令直接取txt 文件的内容而已,然后在dbgrid中显示.select * from 
    opendatasource('microsoft.jet.oledb.4.0','txt;hdr=no;database=文件路径')...[文件名#txt]
      

  21.   

    楼上的稍有问题
    select * from 
    opendatasource('microsoft.jet.oledb.4.0','text;hdr=no;database=c:\')...[R9AppServerConfig#txt]这是我实际测试的结果,我在c盘根目录下有一个R9AppServerConfig.txt文件,在查询分析器中执行上面的语句,会显示文本文件的内容,效果挺好。另外要注意opendatasource是sql server 2000 sp3中带入的新命令。
      

  22.   

    to:fa_ge
    如何使用其他的分隔符呀?
      

  23.   

    都不是
    将文本文件加载到DBGrid1呀,
    ?????????????????