原码如下:
adoXOrders.Close;
  adoXOrders.CommandText:=
    'SELECT xo.*, ''Doctor''=(SELECT UserName FROM Users WHERE UserID = xo.DoctorID),'+
    ' ''Nurse''=(SELECT UserName FROM Users WHERE UserID = xo.NurseID) FROM XOrders AS xo'+
    ' WHERE xo.DoctorID=:DoctorID AND xo.OrderDate=:nowDate ORDER BY xo.OrderID';
  adoXOrders.Parameters.ParamByName('DoctorID').Value:= User.nowUser.UserID;
  adoXOrders.Parameters.ParamByName('nowDate').Value:= DateOf(GetNowDate);
  adoXOrders.Open;
如果把WHERER部分和两个参数赋值部分注释掉,程序运行正常,而SELECT用一个简单的查询也正常,就是现在这样老提示如标题的错误

解决方案 »

  1.   

    To: jiezhi(西域浪子)
    我知道,不过这是习惯问题
      

  2.   

    本来就是 adoXOrders.Prepared:=False;
      

  3.   

    操作系统WinXP, Delphi7.0 难道还不够新吗
      

  4.   

    adoXOrders.Parameters.ParamByName('DoctorID').DataType := xxxxx
    adoXOrders.Parameters.ParamByName('DoctorID').Value:= User.nowUser.UserID;看看强制指定数据类型行不行
      

  5.   

    另外,这个username 可能是ADO的关键字,你最好别用,或者[UserName]扩上
      

  6.   

    谢谢 pazee(耙子) 
    UserName不是关键字,而且我想也不是类型的问题
    比如这样是可以的。
    adoXOrders.CommandText:= 
         'SELECT * FROM Orders WHERE Doctor=:Doctor AND OrderDate=:nowDate';
    adoXOrders.Parameters.ParamByName('DoctorID').Value:= User.nowUser.UserID;
    adoXOrders.Parameters.ParamByName('nowDate').Value:= DateOf(GetNowDate);
    adoXOrders.Open;
      

  7.   

    你把UserName 扩上试过吗?
      

  8.   

    括上[UserName]不行,指定类型也没用,错误依旧
      

  9.   

    想了很多办法,最后还是用最原始的办法,就是在SQL语句中使用变量,但我还是不甘心,在语法上我没有错误,为呵会失败呢。难道我使用的不是ANSI标准的SQL语法
      

  10.   

    我也出现了这个问题,而且是在win2k和winxp上出现的,在Winme,Win98正常,
    极度困惑中。