热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TFDQuery和SQLite:字段类型不匹配,期望:LargeIntactual:WideString

如何解决《TFDQuery和SQLite:字段类型不匹配,期望:LargeIntactual:WideString》经验,为你挑选了1个好方法。

使用Delphi 10.2,SQLite和Teecharts.我的SQLite数据库有两个字段,创建时间:

CREATE TABLE HistoryRuntime ('DayTime' DateTime, Device1 INTEGER DEFAULT (0));

我使用带有以下SQL 的TFDQuery调用来访问表qryGrpahRuntime:

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中的Field Editor,我可以添加两个持久字段,TheDate即a as TDateTimeFieldDeviceTotala TLargeIntField.

我在程序中运行此查询以创建我在设计时创建的TeeChart.只要查询返回一些记录,所有这些都有效.但是,如果请求的日期没有记录,我会收到一条EDatabaseError消息:

qryGrpahRuntime:字段'DeviceTotal'的类型不匹配,期望:LargeInt actual:Widestring

我已经在网上搜索了大量关于如何在空查询中防止此错误的解决方案,但是我找不到任何好运.据我所知,当没有返回数据时,SQLite默认为宽字符串字段.我已经尝试在查询中使用CAST,它似乎没有任何区别.

如果我删除持久字段,查询将在空返回集上打开而没有问题.但是,为了在IDE中使用TeeChart编辑器,我看来需要持久字段.

有没有办法让我可以使用持久字段,或者我将不得不丢弃持久字段,然后在运行时添加TeeChart系列?



1> Victoria..:

FireDAC的SQLite手册中的调整FireDAC映射章节中描述了此行为:

对于SELECT列表中的表达式,SQLite避免使用类型名称信息.当结果集不为空时,FireDAC使用第一个记录中的值数据类型.为空时,FireDAC将这些列描述为dtWideString.要显式指定列数据类型,请附加::到列别名:

SELECT count(*) as "cnt::INT" FROM mytab

所以修改你的命令,例如这样(我使用BIGINT,但你可以使用映射到64位有符号整数数据类型的任何伪数据类型,而不是自动递增,这对应于你的持久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)

PS我通过使用BETWEEN运算符(仅对列值进行一次计算)进行了一次小的优化,并使用了一个转义序列来表示日期常量(实际上你用参数替换,我猜;这只是为了好奇).


此数据类型提示由FDSQLiteTypeName2ADDataType过程解析,该过程在其AColName参数中采用并解析格式为 :: 的列名称.


推荐阅读
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。Django自带了一个sqlite的数据库,已经配置好了可以直接使用。使用方式和sqlalchemy类似,相当于一 ... [详细]
  • iOS关于移动端SQLite,你想知道的都有
    一、SQLite简介SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目 ... [详细]
author-avatar
大胡子姐姐爱油面巾塞肉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有