有存储过程
procedure [dbo].test
@Starttime datetime,
@Duration integer,
@DiffTime integer=0 output
AS
set @DiffTime=@Duration*2
GO在Delphi6中用ADOStoredProc 调用如下:
  with form1.ADOStoredProc1 do
  begin
  Parameters.Refresh;
  Parameters[1].DataType:=ftDatetime;
  Parameters[1].Direction:=pdInput  ;
  Parameters[1].Value:=strtodatetime('2001-11-27 00:14:00');  Parameters[2].DataType:=ftInteger;
  Parameters[2].Value:=5;
  Prepared;
  ExecProc;
  a:=Parameters[3].Value;一运行就在最后一条语句出错,提示如下:
Project Project1.exe raised exception class EOleException with message '[Microsoft][ODBC SQL Server Driver]Optional feature not implemented'.Process stopped.Use Step or Run to contine.如果把存储过程中的第一个参数去掉或把其类型改为非datetime型,ADO调用做相应修改,则运行正确。现在估计是时间变量的参数传入有误,不知原因何在?请各位高手指点。

解决方案 »

  1.   

    Paramters的顺序可能是从0开始的
    不妨试试
    Parameters.ParamByName('@StartTime').Value = ...另外,最好先定义一个TDate的变量来存放这个Value,可能好一些。
      

  2.   

    to bisc_sunny(嶈亴橆湻鑰鑷甯櫨鏅笢鐨勯潚)  guorui_wh(Re) 
    是从0开始索引的,但索引0是调用的默认返回值啊,可以在Object Inspector看到。并且我只有把第一个参数类型换成非Datetime的就能正常运行,如果索引不对的话肯定一团糟了。
    难道就没有人知道吗?
      

  3.   

    不建议使用ADOStoreProc,我曾经碰到过好多问题,参数数量的获取,参数类型的获取都是问题。建议使用ADODataSet,在ADODataSet中调用存储过程比较方便。
      

  4.   

    Parameters.Refresh;
      Parameters[1].DataType:=ftDatetime;
      Parameters[1].Direction:=pdInput  ;
      Parameters[1].Value:=strtodatetime('2001-11-27 00:14:00');  Parameters[2].DataType:=ftInteger;
      Parameters[2].Value:=5;
    上述都去掉试试
      

  5.   

    to blueshu()
    我怎么就不行呢?我的系统Win2000,Delphi6。
    在数据库中建立存储过程,然后用Delphi在面板上拖一个ADOStoredProc,设置连接属性,选择存储过程名。然后在一个button中写下上面的语句,一运行就报上面的错。
    请问还有什么属性要设置吗?