如题,运行半年的存储过程突然提示"字符串转换成datatime时出错........"
调用过程如下:
    dm.spSear.Active := false;
    dm.spSear.ProcedureName := 'sp_Sear;
    dm.spSear.Parameters.Refresh;
    dm.spSear.Parameters[1].Value := trim(edit1.Text);
    dm.spSear.Parameters[2].Value := DP1.Date;
    dm.spSear.Parameters[3].Value := DP2.Date;
    dm.spSear.Parameters[4].Value := TeThemePageControl1.ActivePageIndex + 1;
    dm.spSear.ExecProc;
    dm.spSear.Active := true;
经检验存储过程书写完全没问题,就是在调用的时候两个日期型的参数传入空值数据(注:DP1,DP2为日期型控件),不知道为什么以前为什么一直好好的,突然出现这种问题,我该怎么解决。

解决方案 »

  1.   

    不是日期格式的事,我跟踪了一下数据库,发现调用的时候传进去为NULL值
      

  2.   

    换个方式看看,用ADOQuery
    这样:
    ADOQuery.close;
    ADOQuery.sql.clear;
    ADOQuery.sql.text:=''sp_Sear '''+trim(edit1.Text)+''','''+DateTimeToStr(DP1.Date)+''','''+DateTimeToStr(DP2.Date)+'''+另一参数+';
    ADOQuery.open;
      

  3.   

    换个方式看看,用ADOQuery 
    这样
     
    ADOQuery.close; 
    ADOQuery.sql.clear; 
    ADOQuery.sql.text:= 'sp_Sear '''+trim(edit1.Text)+''','''+DateTimeToStr(DP1.Date)+''','''+DateTimeToStr(DP2.Date)+'''+另一参数+'; 
    ADOQuery.open;
      

  4.   

    sp_SEAR是存储过程名噢,执行不了;现在是好像这个存储过程在调用的时候参数信息给关闭了.为什么一直以前都可以就前几天突然不行了
      

  5.   

    执行不了??
    我调用存储过程一直都用ADOQuery的,一直都这样用啊
      

  6.   

        dm.spSear.Parameters[2].Value := DP1.Date; 
        dm.spSear.Parameters[3].Value := DP2.Date; 
    改成    dm.spSear.Parameters[2].Value := Datetostr(DP1.Date); 
           dm.spSear.Parameters[3].Value := Datetostr(DP2.Date); 
      

  7.   

    ADOQuery.close; 
    ADOQuery.sql.clear; 
    ADOQuery.sql.text:= 'sp_Sear '''+trim(edit1.Text)+''','''+DateTimeToStr(DP1.Date)+''','''+DateTimeToStr(DP2.Date)+'''+另一参数+'; 
    ADOQuery.open;
    还是提示日期格式错误,转换成日期还是一样,根本就没值传到过程中去,就像是这个存储自己关闭了一样.
    在SQL查询平台,输入参数又能执行.