2017-09-22 66 views
2

从Sqlite读取日期字段到Firedac时,出现转换错误。这些字段称为日期,但带有字符串条目(yyyy-mm-dd)。我为日期时间格式=字符串设置了选项,但我发现尽管空值处理正常,空值(='')产生一个错误,我不知道如何处理。从Sqlite与Delphi/Firedac读取日期

+0

你能发表一些代码吗? Sqllite将日期存储为字符串或整数,因此您可能需要进行一些转换。如果我们看到一些代码,也许我们可以帮助.. –

+0

那么,空字符串不是有效的日期字符串。他们应该怎么处理? –

回答

2

您可以启用StrsEmpty2Null选项,该选项将自动将所有空字符串转换为NULL状态。但它适用于由数据组件处理的所有值和参数。所以这不是治愈。

我不确定你在做什么,但一般情况下,NULL是一个状态,你不能将NULL状态转换为一个值,因为它是一个指示没有值的状态。所以,你不能将空字符串转换为日期。

因此,尽量多描述一下你对字符串转换的价值,所以我们可以建议一个正确的方法来处理它。对于SQLite,我建议使用DATE伪数据类型并通过内置的格式化表达式转换值。

+0

谢谢。 StrsEmpty2Null选项解决了问题。我创建的应用程序可以从任何Sqlite数据库中列出表格和字段并执行查询。弗雷德克无法处理日期字段中的空字符串,这让我感到不安。当然,对于有针对性的数据库应用程序,数据库不应该包含空字符串和空字符串的混合。 –

+0

不客气!但是,对于像你所描述的工具来说,启用'StrsEmpty2Null'选项并不好(因为它会将所有空字符串值和参数值清空)。如果我作为此类应用程序的用户想要查看哪些值为空且哪些值为NULL,该怎么办?让我们找到更好的方法。您能否详细说明您如何使用数据集组件?你建立持久性领域?或者什么时候引发异常或导致某些问题? – Victoria

+0

StrsEmpty2Null显示清空和空值相同,但我仍然可以分别查询空(x ='')或空(x = null)。但是,它不会帮助糟糕的数据,如日期='2009-02-29'。 –