- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Delphi 10.2、SQLite 和 Teecharts。我的 SQLite 数据库有两个字段,创建方式为:
CREATE TABLE HistoryRuntime ('DayTime' DateTime, Device1 INTEGER DEFAULT (0));
我使用名为 qryGrpahRuntime
的 TFDQuery
和以下 SQL 访问该表:
SELECT DayTime AS TheDate, Sum(Device1) As DeviceTotal
FROM HistoryRuntime
WHERE (DayTime >= "2017-06-01") and (DayTime <= "2017-06-26")
Group by Date(DayTime)
使用 Delphi IDE 中的字段编辑器,我可以添加两个持久字段,获取 TheDate
作为 TDateTimeField
和 DeviceTotal
作为 TLargeIntField
。
我在程序中运行此查询来创建 TeeChart,它是我在设计时创建的。只要查询返回一些记录,这一切都有效。但是,如果没有请求日期的记录,我会收到 EDatabaseError
异常,并显示以下消息:
qryGrpahRuntime: Type mismatch for field 'DeviceTotal', expecting: LargeInt actual: Widestring
我在网上搜索了大量关于如何防止空查询上出现此错误的解决方案,但没有找到任何结果。据我所知,当没有返回数据时,SQLite 默认使用宽字符串字段。我尝试在查询中使用 CAST,但似乎没有任何区别。
如果我删除持久字段,查询将在空返回集上毫无问题地打开。但是,为了在 IDE 中使用 TeeChart 编辑器,我似乎需要持久字段。
有没有办法让我可以使用持久字段来完成这项工作,或者我是否必须丢弃持久字段,然后在运行时添加 TeeChart 系列?
最佳答案
Adjusting FireDAC Mapping 中描述了此行为FireDAC 的 SQLite 手册章节:
For an expression in a SELECT list, SQLite avoids type name information. When the result set is not empty, FireDAC uses the value data types from the first record. When empty, FireDAC describes those columns as dtWideString. To explicitly specify the column data type, append
::<type name>
to the column alias:
SELECT count(*) as "cnt::INT" FROM mytab
所以修改你的命令,例如这样(我使用了BIGINT,但您可以使用任何映射到 64 位有符号整数数据类型且不自动递增的 pseudo data type ,这对应于您的持久 TLargeIntField 字段):
SELECT
DayTime AS "TheDate",
Sum(Device1) AS "DeviceTotal::BIGINT"
FROM
HistoryRuntime
WHERE
DayTime BETWEEN {d 2017-06-01} AND {d 2017-06-26}
GROUP BY
Date(DayTime)
附注我使用 BETWEEN 做了一个小的优化运算符(仅计算列值一次),并使用 escape sequence对于日期常量(我猜,实际上你用参数替换了它;所以只是出于好奇)。
<小时/>此数据类型提示由 FDSQLiteTypeName2ADDataType 解析在其 AColName 参数中获取并解析格式为
关于delphi - TFDQuery 和 SQLite : Type mismatch for field, 期望:LargeInt 实际:WideString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769558/
我想将虚拟键转换为 WideString。这就是我到目前为止所拥有的...... function VKeytoWideString (Key : Word) : WideString; var W
我有一个在 Windows 中显示气球托盘的函数,它的结构也是这样的: const NIF_INFO = $00000010; NIIF_NONE = $00
我有以下无法编译的代码片段: procedure Frob(const Grob: WideString); var s: WideString; begin s := Gr
我不止一次建议人们使用 WideString 类型的返回值来实现互操作目的。 Accessing Delphi DLL throwing ocasional exception ASP.NET web
我使用此过程将 key 枚举到 Delphi 7 中的 TNTListView (UNICODE) procedure TForm1.TntButton1Click(Sender: TObject);
我有一个文本,需要将其存储在 widestring 变量中。但我的文本是UTF8,而widestring不支持UTF8并将其转换为一些汉字。 WIDESTRING 有 UTF8 版本吗? 我总是使用U
我正在编写一个类,它将宽字符串保存到二进制文件中。我正在使用 Delphi 2005,但该应用程序稍后将移植到 Delphi 2010。我在这里感到非常不确定,有人可以确认一下吗: Delphi 20
该接口(interface)位于_TLB.pas文件 // *********************************************************************/
我正在尝试构建一个(测试)WideString: á (U+00E1 Small Letter Latin A with acute) 但是使用它的分解形式: LATIN SMALL LETTER A
德尔福有一个WrapText功能: function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet; Max
如何将 PAnsiChar 变量转换为 WideString 或 string? 最佳答案 您只需将一个变量分配给另一个变量,然后让 Delphi 编译器为您完成所有转换: var p: PAns
在 C++Builder 中,我编写了以下代码(在 Button1Click 处理程序中),当我在 Debug模式下运行时,我得到“Int3 DbgBreakPoint”(堆栈已损坏?)。 AnsiS
(因为我还没有足够的声望来回答我自己的问题,所以我先把它放在这里。我发布它的时候没有想清楚。对我来说是凌晨 3 点,没有发生让我去别处寻找问题。 我正在创建另一个函数来在 lua 中动态添加一个对象,
我使用delphi 7。 我需要逐行读取一个utf-8文件,每行包含一个单词及其权重(一个数字)因此,我需要读取下一行,然后用分隔符(制表符)分隔行并将其保存在内存中。 所以, 1) Delphi 中
我有一个包含一些数据的 WideString 变量,但是当为字符串分配一些额外的空值时,这些空值或多或少地添加在数据中的随机位置。我现在需要从变量中去除这些空值。如果它是一个字符串,我会检查每个 Ch
我有非常旧的代码(来自 D3): TMyRecord = record Index : Integer; Header : String[70]; Strings : Array[
我有这个代码(我需要将字符串对象添加到 TStringList): var WS: WideString; begin WS := 'allocated string'; SL.AddOb
我很好奇这段代码在 Delphi 2010 中会发生什么: function foo: WideString; var myUnicodeString: UnicodeString; begin
我试图从用 Delphi 编写的 EXE 中接收信息。 EXE 向我传递了一个指向其数据结构之一的指针: Type RecordType = Record St: WideString
我有一种情况需要比较 char* 和 WideString。 如何在 C++ 中将 WideString 转换为 char*? 最佳答案 您可以使用 wcstombs 函数。 size_t wcsto
我是一名优秀的程序员,十分优秀!