我基本上遵循这个例子: http://www.youtube.com/watch?v=B4uxLLIUddg
新 - >其他 - > Datasnap Server - > VCL表格申请表 (所有默认设置,端口211正常工作,TDSServerModule)。
然后在SQLite中创建了一个表:
CREATE TABLE [T1] (
[ID] INTEGER PRIMARY KEY AUTOINCREMENT,
[DATE] DATE,
[TIME] TIME);
在我的ServerMethodsUnit1上,我删除了一个TSQLConnection。 将驱动程序更改为Sqlite。 删除了LoginPrompt。 连接正常。 添加了TSQLDataset并将其连接到我的SQLITECONNECTION。 将CommandText设置为我的T1(表名)。 让它活跃而没有问题。 添加了datasetprovider1并将其排列到我的数据集(表T1)。 全部保存。 运行服务器没有问题。随着服务器的运行,我构建了客户端:
在我的项目中,我添加了一个新项目(vcl表单应用程序)。 添加了SQLConnection组件。 将其驱动程序名称设置为Datasnap。 删除了loginprompt。 在表单上我删除了DSProviderConnection1。 将它连接到我的sqlconnection。 将其ServerClassname设置为TServerMethods1。 测试连接 - 两者都可以正常工作。 删除了Clientdataset。将其RemoteServer属性连接到DSProviderConnection1的属性。 ProviderName到DataSetProvider1。 连接成功。 Clientdataset处于活动状态。 添加了一个DataSource.Linked到我的Clientdataset。 所有连接都有效。所以我添加了一个GUI。 丢弃了TDBGrid和TDBNavigator。将它们链接到Datasource1。 我注意到的第一个奇怪的事情是所有字段都显示Widememo。 为什么这个领域完全不同,我不知道。 去了字段编辑器,添加字段和检查BlobType时 全部显示ftWideMemo。
我试图直接在网格中插入今天的日期,并以某种方式在我的数据库中结束:1899-12-30。 检查表(服务器端的T!),DATE和TIME字段也显示widememo。
我在这里缺少什么?
答案 0 :(得分:0)
SQlite打字非常松散。 日期和时间不是SQLite的一部分。 而且DBGrids不知道如何处理SQLite TEXT。
我解决这个问题的方法是在定义字段时使用VARCHAR(长度)而不是TEXT。 然后那些将在DBGrid中显示OK。我也把日期作为VARCHAR()。
另见
在Delphi的TDBGrid中显示和编辑MEMO字段 http://delphi.about.com/library/weekly/aa030105a.htm
答案 1 :(得分:0)
有no such native DATE nor TIME type in SQlite3:
SQLite没有为存储日期留出的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为TEXT,REAL或INTEGER 值:
- TEXT as ISO8601 strings(" YYYY-MM-DD HH:MM:SS.SSS")。
- 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预示 阳历。
- INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
应用程序可以选择在任何这些中存储日期和时间 使用内置日期格式和格式之间自由转换 时间函数。
同时确保您理解"类型亲和力" SQlite3列的功能 - 这是非常强大的,但如果你来自一个"强类型" RDBMS。
你能做的是
UnixToDateTime
函数; 然后你必须在DataSnap中映射这个值 - 我知道我们mORMot units允许这个,我不完全知道DataSnap。
答案 2 :(得分:0)
我遇到了同样的问题,因为我的所有SQLite字段都显示为DBGrid中的WideMemo字段。
一个简单的解决方案是使用至少一(1)行''来填充相应的sqlite表。数据(没有空字段)。 当VCL组件连接时(第一次),它们似乎能够创建具有正确类型的字段。也就是说,如果右键单击TSQLDataSet组件并选择Fields Editor - >使用至少有一行数据的表创建字段,字段将被正确映射。
我没有检查它是否适用于DATE类型,但它确实适用于整数,双精度和文本。
出于某种原因,如果表为空,则所有字段都将创建为WideMemo blob。