在我的程序中三次用到recordcount,只有第一次得到的是正确的,后两次为什么都是-1呢?
   后来我就就只好写循环,但是最后一次运行此循环时却有错误! 
 with dm.q_son_jishu do
 begin
   close;
   sql.Add('select * from data_son_jishu where father_zhibiao_id=:id');
   parambyname('id').AsString:=dm.q_jishu.fieldbyname('id').AsString;
   open;
   first;
 end;
  j:=0;
  while not dm.q_son_jishu.Eof do
  begin
   j:=j+1;
   dm.q_son_jishu.Next;
  end;

解决方案 »

  1.   

    太夸张了吧
    怎么会出现这种问题
    写出你用recordcount的代码,也让我们找找原因
      

  2.   

    recordcount等于-1说明数据集没有打开
      

  3.   

    最好用SELECT COUNT(*) FROM TABLENAME
      

  4.   

    query 的recordcount 属性有时会出错
    用ADOquery
      

  5.   

    是不是没有数据 eof为 true?
      

  6.   

    with dm.q_son_jishu do
           begin
             close;
             sql.Clear;
             sql.Add('select * from data_son_jishu where shebei_id=:i');
             parambyname('i').AsString:=dm.q_mode.fieldbyname('id').AsString;
             open;
           end;
           j:=dm.q_son_jishu.recordcount;所查的数据可以可以看到一共是49条。但是j却为-1。
      

  7.   

    在‘recordcount’之前用一次‘query.last’试试还是不是-1?
      

  8.   

    打一下ado补丁可能对你有用。
      

  9.   

    你的close 后面缺少clear;
    sql语句重复使用了
      

  10.   

    我个人觉得你的程序recordcount=-1是天经地义的~
    with dm.q_son_jishu do
     begin
       close;
       sql.Add('select * from data_son_jishu where father_zhibiao_id=:id');
       parambyname('id').AsString:=dm.q_jishu.fieldbyname('id').AsString;
       open;//改成execsql看看~
       first;
     end;
      

  11.   

    不要用select * from 如果你的数据集含有二进制类型的字段,recordcount的值就是-1,补丁!
      

  12.   

    注意一下你重复使用的sql语句
      

  13.   

    迄今为止最失败的回答~
    想了一下午,还是坦诚面对自己的无知算了~
    上面我的所谓“天经地义”都是荒唐的~
    不过还是要先sql.clear~
    open是对的了~
    如果recordcount=-1,我也不知道为什么了~
    从此踏实谦虚学习~
      

  14.   

    出错因为缺少clear;
    此query被多次使用了,
    但是recordcount在DELPHI中是会出现为-1的没什么奇怪的.