我想实现以下功能:
有T1和T2两个表,T1表有N条数据,T2是定义了字符段的空表,我想每次应用程序运行时就自动给T2录入数据,T2的数据来源就是T1中满足一定条件的数据条数。其中T1,T2通过adoquery连接,t2通过adoquery2连接。
我是这样做的:
adoquery2.FieldByName('').AsInteger:=adoquery3.SQL.Add('SELECT count(*) FROM T1 WHERE 限制条件'),可是这样不管怎么返回的值都是1,不解?
要怎么在ADOQUERY中实现对数据表数据条数的统计呢?

解决方案 »

  1.   

    adoquery3.SQL.Add('SELECT count(*) FROM T1 WHERE 限制条件 ');//注意加空格
    adoquery2.FieldByName('').AsInteger:=adoquery3.SQL.Add('@@rowcount ');
      

  2.   

    不好意思,应写为:
    adoquery3.SQL.Add('SELECT * FROM T1 WHERE 限制条件 ');//注意加空格
    adoquery2.FieldByName('').AsInteger:=adoquery3.SQL.Add('@@rowcount ');
      

  3.   

    ADOQuery.RecordCount就可以了。
      

  4.   

    adoquery2.FieldByName('').AsInteger:=adoquery3.SQL.Add('SELECT count(*) FROM T1 WHERE 限制条件')
    ////////////////////
    楼主的程序有意思,你右边的函数的返回值是adoquery的add操作成不成功的返回值,你居然用来当成是返回的count(*)的值,有意思。
      

  5.   

    ADOQuery.RecordCount虽然简单,但效率不高,尤其是有很多数据的时候,每次打开表需要把所有的记录下载到客户端,浪费资源,最好的办法还是用Select count(*) form where 条件的方式最好。不过在ADOQuery3的sql属性里填入上面的语句后,需要调用open后才能得到具体的数据,完整的做法应该是
    if ADOQuery3.Active then
      ADOQuery3.close;
    ADOQuery3.SQL.Text:='Select count(*) form where 条件';
    ADOQuery3.Open;
    try
      ADOQuery2.FieldByName('').AsInteger:=ADOQuery3.Fields[0].AsInteger;
    finally
      ADOQuery3.Close;
    end;
      

  6.   

    应该先统计出来,再放到T2表里。
    adoquery3.SQL.Add('SELECT count(*) as 和 FROM T1 WHERE 限制条件');
    adoquery3.exesql;
    adoquery2.fieldbyname('').asinteger:=adoquery3.fieldbyname('和').asinteger;
    adoquery2.post;
      

  7.   

    ADOQr_Tmp.Close;
      ADOQr_Tmp.SQL.Clear;
      ADOQr_Tmp.SQL.Add('SELECT Count(*) FROM 订单明细');
      ADOQr_Tmp.Open;  ADOQuery2.close;
      ADOQuery2.Open;
      ADOQuery2.Edit;
      ADOQuery2.FieldByName('SUM_Count').Value := ADOQr_Tmp.fields[0].Value;
      ADOQuery2.Post;