【发布时间】:2010-11-11 05:10:42
【问题描述】:
由于 Firebird/Interbase 中的 TimeStamp 数据类型不是 DateTime (*),因此我有以下脚本永远不会检索任何数据
我应该如何解决它?德克萨斯州。
with DMApp.qryValidPeriod_ do
begin
Close;
SQL.Clear;
SQL.Add('select P.* from PERIOD P, FISCAL_YR F');
SQL.Add('where');
SQL.Add('P.FISCAL_YR_ID = F.FISCAL_YR_ID and');
SQL.Add('F.ENTITY_DB_ID = :PRIMARY_DB_ID and');
SQL.Add('F.FISCAL_YR_ID = :CURR_FY_ID and');
SQL.Add(':pTranDate BETWEEN P.BEG_PERIOD and P.END_PERIOD');
ParamByName('pTranDate').AsDateTime := sBATCH_DATE;
// BEG_PERIOD和END_PERIOD为TimeStamp数据类型如'2010-11-09 12:00' // 参数返回数据类型如'2010-11-09'
(*) 时间戳是 Firebird/Interbase/SQL Server 中可用的列数据类型...有助于确保数据完整性。每次插入或更新包含时间戳列的行时,时间戳都会自动更新。时间戳列中的值不是日期时间数据,而是 binary(8) varbinary(8) 数据。时间戳数据类型与系统时间无关,它只是一个单调递增的计数器,其值在数据库中始终是唯一的(使其基本上是唯一的随机数。)
【问题讨论】:
-
此示例中的时间戳是您自己的自定义数据类型吗?因为我们经常使用标准的 TIMESTAMP 数据类型,并且与查询参数相比,它工作得很好。
-
不,不是。它是火鸟 2.5。如上所示,脚本从不返回任何数据 - (因为参数 pTranDate 的值只有在调试器中看到的日期格式)
-
该代码应该可以正常工作。查询没有返回结果的原因可能有所不同。检查您的其他参数。
-
示例:Delphi 将 '2010-11-09' 作为 pTranDate 参数的值。使用此值,脚本不返回任何数据。如果我用“2010-11-09 00:00”字面替换这个参数值,那么脚本会返回数据。
-
'2010-11-09'是字符串值,怎么给参数设置?