读书人

DELPHI中调用带有日期型参数的存储过程

发布时间: 2012-02-14 19:19:19 作者: rapoo

DELPHI中调用带有日期型参数的存储过程

SQL code
CREATE PROCEDURE 合计@date1 datetime,@date2 datetimeAS select top 20 a.物料代码,sum(a.总数量)as 数量合计,sum(a.总金额)as 金额合计,a.物料名称,a.型号 from(SELECT dbo.sbilldet.itemno AS 物料代码, SUM(dbo.sbilldet.qty) AS 总数量 ,      SUM(dbo.sbilldet.sellsum) AS 总金额, dbo.itemdata.itemname AS 物料名称,       dbo.itemdata.descript AS 型号,dbo.sbillmst.carddt as 日期FROM dbo.sbilldet INNER JOIN      dbo.sbillmst ON dbo.sbilldet.sysno = dbo.sbillmst.sysno INNER JOIN      dbo.enterprise ON dbo.sbillmst.compno = dbo.enterprise.compno INNER JOIN      dbo.itemdata ON dbo.sbilldet.itemno = dbo.itemdata.itemnoGROUP BY dbo.sbilldet.itemno, dbo.itemdata.itemname, dbo.itemdata.descript,       dbo.sbillmst.carddt, dbo.sbillmst.ischeckHAVING (SUM(dbo.sbilldet.qty) >= 0) AND (dbo.sbillmst.ischeck = 1) AND       (dbo.sbillmst.carddt >=@date1 AND       dbo.sbillmst.carddt <=  @date2)) agroup by a.物料代码,a.物料名称,a.型号order by 数量合计 descGO

---------------------
Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);begin   if datetimepicker1.Date >datetimepicker2.Date then   begin      showmessage('开始日期大于终止日期');      datetimepicker1.SetFocus ;      exit;      end;  adoquery1.Close;  adoquery1.sql.Clear;  adoquery1.SQL.text:='execute  合计 (:date1,:date2)';  adoquery1.Parameters.ParamByName('@date1').value:=DateTimePicker1.DateTime;  adoquery1.Parameters.ParamByName('@Date2').Value:=DateTimePicker2.DateTime;  adoquery1.ExecSQL;  adoquery1.refresh;end;


运行后提示Adoquery1:parameter '@date1' not found
试了很多次都不行。请教各位该怎么解决?

[解决办法]
参数应该是date1,而不是@date1
[解决办法]
使用存储过程前,先要创建参数
用ADOQuery1.Parameters.CreateParameter去创建
[解决办法]
关键看什么数据库,可以把数据库当中的日期转换为字符串进行比较等,一般数据库也都支持字符串的日期写入。当然也可以写timestamp格式。比如Microsoft所能识别的包括ODBC在内支持的
日期:{d 'yyyy-mm-dd'}
时间:{t 'hh:mm:ss[.fff]'}
timestamp:{ts 'yyyy-mm-dd hh:mm:ss[.fff]'}

又比如db2所识别的: timestamp('yyyy-mm-dd-hh.mm.ss.zzzzzz')

读书人网 >.NET

热点推荐