///////delphi中。。
begin
      ADOQuery1.Close;
      ADOQuery1.SQL.clear;
      adoquery1.SQL.Add('execute test :time1,:time2');
      ADOQuery1.Parameters.Items[0].DataType:=ftdatetime;
      adoquery1.Parameters.Items[0].Value:=datetostr(datetimepicker1.Date);
      ADOQuery1.Parameters.Items[1].DataType:=ftdatetime;
      adoquery1.Parameters.Items[1].Value:=datetostr(datetimepicker2.Date);
      adoquery1.Prepared;
      adoquery1.ExecSQL;
      ADOQuery1.Open;     
end;
/////////SQL中
CREATE PROCEDURE test
@time1 datetime,
@time2 datetime
 AS
Declare @sql varchar(8000)
Set @sql = 'Select ttime as 日期'
Select @sql = @sql + ',sum(case item when '''+item+''' then value else 0 end) ['+item+']'
from (select distinct item from cycletable) as cycletable --把所有唯一的  名称都列举出来
Select @sql = @sql+' from cycletable-- where recordTime>'+@time1+''
Exec (@sql)
GO
/////////执行时提示 从字符串转换为datetime时发生语法错误,哪位高手能帮忙看一下是什么原因??
谢谢!

解决方案 »

  1.   

    您是说把datetostr换成formatdatetime?delphi编译通不过。
      

  2.   

    还是转换出错/
    SQL语句有没有错》?
    DELPHI语句能给的详细点吗??
    十分感谢!!!!
      

  3.   

    测试结果,将where   recordTime> '+@time1+'' 
    中的@time1换为convert(varchar(20), @time1, 101)就可以了,
    问题出现在@time1放在字符串中时,sqlserver要强制类型转换,但是转换后的格式是默认格式:mon dd yyyy hh:miAM(或 PM),这种格式和recordtime比较的时候不匹配,所以要自己手动转换,
      

  4.   

    ADOQuery1.Parameters.Items[0].DataType:=ftdatetime; 
    adoquery1.Parameters.Items[0].Value:=datetostr(datetimepicker1.Date); 
    ADOQuery1.Parameters.Items[1].DataType:=ftdatetime; 
    adoquery1.Parameters.Items[1].Value:=datetostr(datetimepicker2.Date);
    既然DataType是ftDateTime,那么传进去的参数值怎么还是字符串?
    改成:
    ADOQuery1.Parameters.Items[0].DataType:=ftdatetime; 
    adoquery1.Parameters.Items[0].Value:=datetimepicker1.Date; 
    ADOQuery1.Parameters.Items[1].DataType:=ftdatetime; 
    adoquery1.Parameters.Items[1].Value:=datetimepicker2.Date;
      

  5.   

     
    hhnick  你好;
    你的方法编译能通过,查询也不报错 了,但是却不能根据限定的时间段查询了,好像时间约束条件不起作用。
      

  6.   

    可以根据你SQL里存的日期是什么格式的,然后把delphi里的日期格式化成对应的
    如SQL 里为2007-12-18 15:00:00 则Delphi里就为FormatDateTime('YYYY-MM-DD HH:MM:SS',now)
    还有用datetimepicker.data只能取到年月日,而不能取到小时分秒
    所以结果无
    如果用DatetimePicker.data就要去格式化存储过程的成为年月日
    Convert(varchar(12), @time1, 23) 
    祝你成功!
      

  7.   

    要看你的时间格式了,具体我不清楚你的数据是什么,你再试试,sql server中convert函数有很多格式,不知道哪个格式是你需要的,可以查看帮助。