我的程序如下:
procedure TFrmShow.selectClick(Sender: TObject);
begin
  ibquery1.Close;
  if ibquery1.Active = false then ibquery1.Open;
  //If not (ibquery1.State in [dsEdit]) then ibquery1.Edit;
  ibquery1.SQL.Clear;
  ibquery1.SQL.Add('select USER_CODE,METER_CODE,READ_DATE,READ_TYPE from TABLE_READ where USER_CODE=:inusercode OR METER_CODE=:inmetercode OR READ_DATE=:inreaddate OR READ_TYPE=:inreadtype');
  //ibquery1.Open;
  //ibquery1.First;
  if not ibquery1.Prepared then ibquery1.Prepare;
  ibquery1.ParamByName('inusercode').AsString:=usercode.text;
  ibquery1.ParamByName('inmetercode').AsString:=metercode.text;
  ibquery1.ParamByName('inreaddate').AsString:=MEdate.text;
  ibquery1.ParamByName('inreadtype').Asinteger:=strtoint(leftstr(metertype.text,1));
  ibquery1.Open;
  //ibquery1.Post;
  ShowMessage(ibquery1.ParamByName('inusercode').AsString);
  ShowMessage(inttostr(ibquery1.RecordCount));
end;
首先,我问一个很幼稚的问题:把dbgrid1通过数据源(datasource1:Tdatasource)与ibqurey1建立联系,就可以查询某数据库的数据了吧?(ibqurey1与组件ibdata:ibdatabase建立了联系)
快没信心了,难道女生做程序真的就这么弱!!!??????????!
哦,最终我还是想得到大家的帮助,求援!!

解决方案 »

  1.   

    对了,我的ibquery1中有个DataSource属性还没赋值,不知是否与此有关?!
    困了~~,我也该睡了,可不想熬夜!帅哥们,明天见~~!!
      

  2.   

    IBQuery1.DataBase:=IBDataBase;
    DataSource1.DataSet:=IBQuery1;
    DBGrid1.DataSource:=DataSource1;
    这些代码不必手动输入,我这儿显示的是你应该确保有这样的设置。你在它们的属性列表里均能找到。首先要设置的是IBDataBase的数据文件,我想应该没有问题吧。你输入的大部分都可以直接写到IBquery1的属性里,如果不在运行的时候反复更改的话,比如象你上面的SQL语句就可以写到IBQuery1的SQL属性里,当然你这样做也不是不可以的。不过我还是想按照我的习惯修改一下你上面的程序
    procedure TFrmShow.selectClick(Sender: TObject);
    begin
      if IBQuery1.Active then
         ibquery1.Close;
      //注意,在对sql属性赋值前要关闭数据集,赋值后打开才有作用
      IBQuery1.SQL.Clear;
      IBQuery1.SQL.Add('select USER_CODE,METER_CODE,READ_DATE,READ_TYPE from TABLE_READ where USER_CODE=:inusercode OR METER_CODE=:inmetercode OR READ_DATE=:inreaddate OR READ_TYPE=:inreadtype');
      ibquery1.ParamByName('inusercode').AsString:=usercode.text;
      ibquery1.ParamByName('inmetercode').AsString:=metercode.text;
      ibquery1.ParamByName('inreaddate').AsString:=MEdate.text;
      ibquery1.ParamByName('inreadtype').Asinteger:=strtoint(leftstr(metertype.text,1));
      if not IBQuery1.Prepared then
        IBQuery1.Prepare;
      IBQuery1.Open;//现在才能打开
      //如果你要修改数据采用下面这句
      if not (IBQuery1.state in [dsEdit]) then //这个判断可有可无,因为默认打开都处于dsBrowse状态,插入用dsInsert
       //这儿放修改的代码
      IBQuery1.Post;//如果保存修改或者插入的数据,就要post.
      ShowMessage(IBQuery1.ParamByName('inusercode').AsString);
      ShowMessage(inttostr(IBQuery1.RecordCount));//显示打开的数据集的记录条数
    end;
      

  3.   

    DataSource1.DataSet:=IBQuery1;
    DBGrid1.DataSource:=DataSource1;
    IBQuery1.DataBase:=IBDataBase;
    当然 query 要连接好数据库了。
      

  4.   

    真是寫得夠亂的了.先把query關閉然後再寫sql語句,然後再打開,就有了呀.當然在datasouce的dataset屬性中要選擇ibquery
      

  5.   

    楼上的品雨,我按照你所写的做了,可还是recordcount:=0,我还有什么地方是错的,难道本身数据库有问题?!
      

  6.   

    娃哈哈哈 瓦 楼主就是MM哦寒 帮助文件 DELPHI自带的2004-11-10 21:23:00 
    9点30不到就睡了 我每天都是1点睡瓦
      

  7.   

    哈哈,delphi的help里的delphi help阿,不过是e文的。dbgrid的datasource属性连datasource1.datasource1的dataset属性连query1.其他的没问题的话就可以显示了。
    保护女程序员!珍稀啊!
      

  8.   

    首先你必须把数据库连接好.DBGrid的DataSource属性连DataSource1.DataSource1的DataSet属性连Query1,Query1的Connection连DataBase.之后再执行代码.
      

  9.   

    是否数据库中根本就没有数据阿,我的PLMM,呵呵
      

  10.   

    DBGrid DataSource->DataSource1
    DataSource DataSet->Query1
    Query1 DatabaseName->选择数据库别名
    查询时候
    CLOSE,
    sql.clear
    sql.add(sqlstr)
    open
    先select * from table_read...就知道你有没有设置对了.
    再慢慢调整SQL语句吧..
      ibquery1.ParamByName('inusercode').AsString:=usercode.text;
      ibquery1.ParamByName('inmetercode').AsString:=metercode.text;
      ibquery1.ParamByName('inreaddate').AsString:=MEdate.text;
      ibquery1.ParamByName('inreadtype').Asinteger:=strtoint(leftstr(metertype.text,1));
    你的那些text最好都加上TRIM...
    如trim(usercode.text)..很有可能就是没去掉空格导致查询出错..