首先说明一下:
我用的数据库是sql-server  用adoquery,datasource,dbgrid控件我在Dbgrid中插入了列。写下如下代码。
第一个表(cost)可以正常显示:
str:='select * from cost';
condata.ADOQuery1.Close;
condata.adoquery1.Active:=true;
condata.adoquery1.SQL.Clear;
condata.adoquery1.SQL.Add(str);
condata.adoquery1.ExecSQL;
condata.adoquery1.Open;但是第二个表(ClassCost)却怎么也没办法显示了:
str:='select * from Classcost';
condata.ADOQuery1.Close;
condata.adoquery1.Active:=true;
condata.adoquery1.SQL.Clear;
condata.adoquery1.SQL.Add(str);
condata.adoquery1.ExecSQL;
condata.adoquery1.Open;
dbgrid中只显示了表中有多少行记录,但是却没有内容,格子里全是空的,无法修改任何内容,但是可以删除,删除的时候,数据库里对应的相应行也删除。
两个表的字段是一样的,只是有不同的用途。但是当我将Dbgrid中我插入的列都删除的时候,第二个表中的内容有可以正常显示了。 请高手指点。

解决方案 »

  1.   

    你不觉得同时用
    condata.adoquery1.ExecSQL;
    condata.adoquery1.Open;
    很多余么!你的代码写的太冗余了,精简点吧,还有阿,ExecSQL和Open的区别你要清楚,前者不返回数据集也就是仅仅执行而已,后者则返回也就是执行后返回最新数据。
    自己改下吧。
      

  2.   

    当查询第一个表时:
    str:='select * from cost';
    condata.ADOQuery1.Close;
    condata.adoquery1.SQL.Clear;
    condata.adoquery1.SQL.Add(str);
    condata.adoquery1.Open;查询二个表时:
    str:='select * from Classcost';
    condata.ADOQuery1.Close;
    condata.adoquery1.SQL.Clear;
    condata.adoquery1.SQL.Add(str);
    condata.adoquery1.Open;
      

  3.   

    DBGRID中插入列的问题 应该是DBGrid指定DataSource即可
      

  4.   

    看看你dbgrid插入的列是否和查询相应的字段设置好了连接。
    另外,建议你的代码这样写
    str:='select * from cost';
    condata.ADOQuery1.Close;
    condata.adoquery1.SQL.Clear;
    condata.adoquery1.SQL.Add(str);
    condata.adoquery1.Open;第二个表(ClassCost)
    str:='select * from Classcost';
    condata.ADOQuery1.Close;
    condata.adoquery1.SQL.Clear;
    condata.adoquery1.SQL.Add(str);
    condata.adoquery1.Open;