又及:
我使用下面这段代码来判断查询结果是否为空,请问对不对?有没有更好的办法?
  adouser.Close;
  adouser.SQL.Clear;
  adouser.SQL.Add('select * from userpass where name=:name and password=:password');
  adouser.Parameters.ParamByName('name').value:=name;
  adouser.Parameters.ParamByName('password').value:=password;
  adouser.Open
  if adouser.Eof then result:=false  //  <---- 此句用来判断结果
    else result:=true;

解决方案 »

  1.   

    你最好安装Delphi的ADOExpress补丁,因为ADOExpress总有这样或者那样的Bug,如果你比较熟练,还是用ADO原生对象罢:),我就是这么做的。
      

  2.   

    从你的代码中看不出来为什么回这样.
    另外:用EOF或者BOF来判断结果数量都不太好.还是用recordcount属性
    判断他是不是为0就可以了
      

  3.   

    用ParamByName('name').value:=name;比较危险,当name为空时就可能出错.
    可改为:
      adouser.Close;
      adouser.SQL.Clear;
      adouser.SQL.Add('select * from userpass where name='+name
                     +' and password='+password);
      adouser.Open
      

  4.   

    没错,这里DELPHI5.0 ADO控件的问题,到了6.0就不会了,我也遇到过这样的问题,差点气死了,还有更怪的问题呢,我用ADO的SaveToFile方法保存的XML文件,再用LoadFromFile方法调出来,编辑后老是不能正确反应到数据库中,谁有什么心得?
      

  5.   

    我也遇到过这样的情况,后来也重新装了一次,没有发生过了。
    也听说ado有BUG,具体也不太清楚。
      

  6.   

    打补丁:http://info.borland.com/devsupport/delphi/mdac26.html,      ADOExpress Update Pack 2 http://info.borland.com/devsupport/delphi/downloads/dent501download.html,Delphi 5 Enterprise Update Pack 1.先装后一个。
      

  7.   

    谢谢各位兄弟,但是我眼前的代码都是用D5做的呀,听说D6不兼容的控件,
    所以眼前是不可能升级到D6的,因为那样工作量很大,
    如果要升级ADO的话,应该到那里下载升级程序?
    应该怎样升级?
      

  8.   

    下一ADO补丁,安装一下就可以了,我用D5+WIN2K+SQLSERVER2K时出过这样的错误.补丁下载的地方多着呢,随便去网上一找也能找回来两筐...
      

  9.   

    ftp://ftp.borland.com/pub/bcppbuilder/devsupport/patches/bcpp5/BCB5ADOUpgrade1.exe
    官方站点!
      

  10.   

    判断是否为空最好用:
    if not ADOQuery1.IsEmpty then
    begin //不空
    end
    else //空
      

  11.   

    我使用下面这段代码来判断查询结果是否为空,请问对不对?有没有更好的办法?
      adouser.Close;
      adouser.SQL.Clear;
      adouser.SQL.Add('select * from userpass where name=:name and password=:password');
      adouser.Parameters.ParamByName('name').value:=name;
      adouser.Parameters.ParamByName('password').value:=password;
      adouser.Open  if adouser.Eof then result:=false  //  <---- 此句用来判断结果
        else result:=true;  不能这样判断应该
      if (adouser.Eof and adouser.bof)
     then result:=false  //  <---- 此句用来判断结果
        else result:=true;
     或者
      if (adouser.recordcount<1)
     then result:=false  //  <---- 此句用来判断结果
        else result:=true;
      

  12.   

    TO:pazee(耙子) 
      你给我的这个是BCB的呀,我需要一个DELPHI5的补丁
      

  13.   

    TO:楼上各位兄弟:
       我已经下载到补丁了,但是在安装的时候要输入口令;
    口令的格式与D5的安装口令相同,我输入了D5的安装口令;
    ski-hd3-c139,92x0,92x1,但是无效,
       有没有那位兄弟知道这个补丁的口令?
      

  14.   

    对不起:上面是delphi6的系列号,下面才是delphi5的:
    ski-hd3-c139-92x0-91x0
      

  15.   

    zhengkapi (zhengkapi) 
        方法很多!
        1,就是按照上面各个老兄说得,Ado升级.升级密码与delphi的一样,因为这个是delphi的ado问题.
        2,将query的lockType的属性改为ltUnspecified 也同样可以解决问题!
        3,关于兼容问题,你说的不对,delphi6当然可以打开编译Delphi5的文件.反之不行的!但也有小软件将delphi6的文件反相生成delphi5文件的!
      

  16.   

    TO:楼上各位兄弟:
      我使用了ADO升级的办法,但是升级后dclado50.bpl无法加载,就是在面板上所有的ADO组件没有了,不知是什么原因,请有碰到相同问题的兄弟指点,TO:zhangxzh(报表之王) 兄弟
      你说的第2个方面我还没有试过,我马上就试,谢谢你的指点,关于你说的第三点因为我以前碰过在D5下面的很多第三方控件在D6下都用不了,同样很多D4的的控件没办法在D5上使用
      

  17.   

    这样应该能解决:
      adouser.recordset.close;  //增加这一句。
      adouser.Close;
      adouser.SQL.Clear;
      adouser.SQL.Add('select * from userpass where name=:name and password=:password');
      adouser.Parameters.ParamByName('name').value:=name;
      adouser.Parameters.ParamByName('password').value:=password;
      adouser.Open