我对MySql有一些经验,我是第一次搬到Sqlite。
这个
Sqlite documentation for data types
,第1.2节规定
SQLite没有用于存储日期的存储类
和/或时间。相反,SQLite的内置日期和时间函数
能够将日期和时间存储为TEXT、REAL或INTEGER
价值观
我更喜欢自动时间戳,但如果它能让我的代码正常工作,我会忍受每次都要传递它。
以下内容
this question
,我已将我的字段声明为
`time_stamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
然而,它没有在DB ware网格上显示任何内容。
我添加了一个
OnDrawCell()
并认为这可能会有所帮助:
var cellText : String;
cellValue : String;
dateTime : TDateTime;
begin
if ARow = 0 then
Exit;
cellValue := myGrid.Cells[ACol, ARow];
case ACol of
0: ; // invisibe column, do nothing
1: cellText := cellValue;
2: begin
dateTime := StrToDateTime(cellValue);
cellText := DateTimeToStr(dateTime);
end;
3: cellText := cellValue;
4: cellText := cellValue;
end;
myGrid.Canvas.FillRect(Rect);
myGrid.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, cellText);
其中第2列是我的时间戳,但显然是空的。
所以,我的问题是,有人能纠正这个代码片段吗,或者向我展示一个代码示例,说明如何声明默认为当前时间戳的Sqlite列,以及如何在DB感知网格中显示该列?如果有帮助的话,我很乐意存储Unix时间戳。
顺便说一下,我使用的是XE7,FireDac和TMS TAdvDbGrid。
[更新]正如下面的一个评论线程所提到的(也许应该是最初提到的),在本例中,我使用
TDateTime
和
IncSecond(startTime, delay * i)
因此,实际上,我正在向该字段写入一个TDateTime,然后关闭/打开数据源,显示新行的所有其他字段,但不显示该字段。
但是,这实际上偏离了我最初的“请提供示例”问题,并将其转化为“请修复我的代码”问题。任何一个答案都会让我很高兴。