【发布时间】:2013-11-08 06:24:35
【问题描述】:
我是 Java 开发人员。我在 Delphi 中有一些旧程序。在旧版本中,他们使用mdb。我修复了它以与 SQL Server 连接。所有 SQL 查询都使用TAdoQuery 实现。
qryTemp.SQL.Text:='select sum(iif(ComeSumm>0,comesumm,0)),sum(iif(lostSumm>0,lostsumm,0)) from cash '+
'where (IdCashClause is null or idcashclause<>8) '+
' and cashNum='+IntToStr(i)+
' and CashType=0'+
' and format(PayDate,"dd/mm/yyyy")=format('''+DateToStr(Date)+''',"dd/mm/yyyy") ';
程序抛出异常:
列名“dd/mm/yyyy”无效。
我已修复其他查询以进行比较:
qryTemp.SQL.Text:=' select top 1 iif(ComeSumm>0,comesumm,0) from cash '
+' where idCashReason=1 and idCashClause=8 and cashNum='+IntToStr(i)
+' and PayDate<:D'
+' order by payDate desc';
qryTemp.Parameters.ParamByName('D').Value:=DateTimeToStr(Date);
我能否在不重写整个项目的情况下快速修复所有查询以使用 SQL Server?
【问题讨论】:
-
由于您的 SQLServer 支持 IIF,您似乎使用的是 2012 版。不过,您必须修复所有/大部分查询,这将是切换到参数的机会,就像您为PayDate,在任何地方,例如这里对于 cashNum='+IntToStr(i)。也许您可以将所有 SQL 作为 const 移动到单个(资源)文件中以供将来调整。
-
谢谢。我用日期替换所有参数,通过
qryTemp.Parameters.ParamByName('D').Value:=DateTimeToStr(Date); -
PayDate 的列定义是什么,是日期时间还是字符串??
-
格式为
date