首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-31 
DELPHI中调用带有日期型参数的存储过程CREATE PROCEDURE 合计@date1 datetime,@date2 datetimeAS select t

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

CREATE PROCEDURE 合计
@date1 datetime,@date2 datetime

AS 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.itemno
GROUP BY dbo.sbilldet.itemno, dbo.itemdata.itemname, dbo.itemdata.descript, 
      dbo.sbillmst.carddt, dbo.sbillmst.ischeck
HAVING (SUM(dbo.sbilldet.qty) >= 0) AND (dbo.sbillmst.ischeck = 1) AND 
      (dbo.sbillmst.carddt >=@date1 AND 
      dbo.sbillmst.carddt <=  @date2)) a
group by a.物料代码,a.物料名称,a.型号
order by 数量合计 desc
GO

---------------------
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')

热点排行