作者:丨火云邪神丨 | 来源:互联网 | 2023-01-15 21:32
我在绑定到SQLite3数据库的TFDQuery中有一条SQL语句。如果我执行以下查询,那么如果存在符合WHERE子句的行,则可以正常工作。在这种情况下,MyMield是一个浮点数,当我使用字段编辑器预构建表字段时,它正确显示为TFloatField。但是,如果没有匹配的行(空结果),则将MyMaxField作为TWideStringField返回。这与我在设计它们时创建的字段对象类型不匹配,并且返回并出错(甚至在设计时)。
SELECT max(MyField) AS MyMaxfield FROM MyTable WHERE MyOtherFfield=10
我还尝试使用将max()转换为REAL,但仍然失败。
德尔福10.2
1> Victoria..:
这在描述调整FireDAC映射的FireDAC的SQLite的手册的一章:
对于SELECT列表中的表达式,SQLite避免使用类型名称信息。当结果集不为空时,FireDAC使用第一条记录中的value数据类型。如果为空,则FireDAC将这些列描述为dtWideString。要显式指定列数据类型,请追加::
到列别名:
SELECT count(*) as "cnt::INT" FROM mytab
因此,要解决问题,只需为表达式列指定数据类型。例如:
SELECT
MAX(MyField) AS "MyMaxfield::REAL"
FROM
MyTable
WHERE
MyOtherFfield = 10