刚使用delphi
问一下各位大人,怎么我用combox通过adoquery读取数据库不显示数据
我的代码如下:
var
  i : integer;
begin
   cb_gpmc.Clear;
   adoquery1.Close;
   adoquery1.SQL.Clear;
   adoquery1.SQL.Add('select 公司名称 from 公司信息');
   adoquery1.ExecSQL;
   adoquery1.Open;
   begin for i := 0 to adoquery1.recordcount - 1
      do
      cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
      adoquery1.Next;
   end;
end;
好像是adoquery1没有返回数据给combox,谢谢各位大侠;
还问一下,adoquery1执行的sql语句是   adoquery1.SQL.Add('select 公司名称 from 公司信息');
还是adoquery1中sql属性的语句?
非常感谢

解决方案 »

  1.   


    var
      i : integer;
    begin
      cb_gpmc.Clear;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select 公司名称 from 公司信息');
    //有数据集返回要用open; adoquery1.ExecSQL;
      adoquery1.open;
      adoquery1.first;
      while not adoquery1.eof do
      begin
        cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
        adoquery1.Next;
      end;
    end
      

  2.   

    是不是我adoquery1哪里设置有问题啊?
    好像根本看不到adoquery1有查询的迹象
    adoquery1在使用之前要做特别的设置吗?
    我的connection和datasouce应该没有问题,我可以通过他们调用数据库的存储过程
      

  3.   

    delphi中我在adoquery1.SQL.Add('select 公司名称 from 公司信息');中如果表“公司信息”不存在会报错吗?
    我的好像没有任何问题,是不是设置的有问题,combox根本没有调用啊?
    谢谢
      

  4.   

    设置断点跟踪一下就是了。看来楼主是个新手吧。
    --
    另一个问题:adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
    还是adoquery1中sql属性的语句?这两句话指的是同一个意思 。都是执行的SQL的语句.adoquery1.sql.add(),指不过是TAdoquery的一个方法而已。
      

  5.   

    第一次用这个,好像我的combox和adoquery1就没有关联上,不知道为什么,有这方面的资料吗?
      

  6.   

    cb_gpmc.items.Add 就是往combox中加选择项,不用关联;
    最后要关闭游标 adoquery1.Close
    是不是 AdoConnection 没有打开呀?
      

  7.   

    打开了吧
    我都可以通过AdoConnection执行存储过程啊
      

  8.   

    1、检查是否设置ADOQuery的Connection;
    2、还问一下,adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
    还是adoquery1中sql属性的语句?
    ADOQuery执行的是SQL属性中的语句。不过,你通过adoquery1.Close;
      adoquery1.SQL.Clear;这两句后,SQL中原来的语句已经被清除了;然后再执行adoquery1.SQL.Add('select 公司名称 from 公司信息');
    之后,ADOQuery就执行你新添加到SQL属性中的语句"select 公司名称 from 公司信息"了。
    3、adoquery1.ExecSQL;
      adoquery1.Open;
    这两句,只用一句。如一楼所述,有数据集返回时使用open方法,如果不需要返回查询结果,调用ExecSQL,在调用Open或ExecSQL之前,最好先调用Prepare通知服务器作好准备。
    4、使用select时,要注意去除重复记录:对于单表唯一查询用:distinct,多表的唯一查询用:group by
    。以下是一段示例代码:
    procedure TFmAddr.FormCreate(Sender: TObject);
    begin
      QryAddr.DatabaseName:=ExTractFilePath(Application.ExeName);
      with QryAddr do
      begin
       Close;
       SQL.Clear;
       SQL.Add('Select distinct 开发公司名称 from "addr.db" addr order by 开发公司名称');
       Prepare;
       Open;
      end;
      while (not QryAddr.EOF) do
      begin
        CbxName.Items.Add(QryAddr.Fields[0].AsString);
        QryAddr.Next;
      end;
    end;
      

  9.   

    试试这段代码:
    begin
      CbxName.Clear;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select 开发公司名称 from test');
      try
        adoquery1.Open;
        while not AdoQuery1.Eof do
              begin
                CbxName.Items.Add(AdoQuery1.FieldValues['开发公司名称']);
                AdoQuery1.Next;
              end;
      except
          showmessage('错误');
      end;
    end;
      

  10.   

    问一下  你用combox和什么数据库连接呢?
      

  11.   

    关键在于 open与 execsql 用法 错误了
      

  12.   

    begin
      cb_gpmc.Clear;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select 公司名称 from 公司信息');
      adoquery1.Open;
      while not adoquery1.eof do
      begin
        cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
        adoquery1.Next;
      end;
    end;
      

  13.   

    去掉adoquery1.ExecSQL;这行看看。。好像那个循环的BEGIN。。END 也有问题。。
      

  14.   

    我写错了,没有写在onshow里面,悲剧,谢谢大家