У меня есть некоторый опыт работы с MySql, и я впервые перехожу на Sqlite.
В документации Sqlite для типов данных, раздел 1.2, говорится, что
SQLite не имеет класса хранения, выделенного для хранения дат и/или времени. Вместо этого встроенные функции даты и времени SQLite способны хранить даты и время в виде значений TEXT, REAL или INTEGER.
Я бы предпочел автоматическую временную метку, но буду жить с необходимостью передавать ее каждый раз, если она заставит мой код работать.
Следуя этому вопросу, я объявил свое поле как
`time_stamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
Однако он ничего не отображает в сетке СУБД.
Я добавил 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, который по умолчанию использует текущую отметку времени, и как отобразить это в сетке с поддержкой БД? Я достаточно рад сохранить временную метку Unix, если это поможет.
Кстати, я использую XE7, FireDac с TMS TAdvDbGrid.
[Обновление] Как упоминалось в ветке комментариев ниже (и, как, возможно, должно было быть упомянуто изначально), в этом случае я генерирую некоторые фиктивные данные для тестирования морских свиней, используя TDateTime
и IncSecond(startTime, delay * i)
. Итак, по сути, я пишу TDateTime в это поле, затем закрываю/открываю источник данных, и отображаются все остальные поля новой строки, но не это.
Но на самом деле это отходит от моего первоначального вопроса «пожалуйста, приведите пример» и превращает его в вопрос «пожалуйста, исправьте мой код». Ответ на любой из них сделает меня очень счастливым.
mapping to pseudo types
. Поэтому определите свое поле какDATETIME
. Тип данныхTIMESTAMP
FireDAC сопоставляется с типом данныхdtDateTimeStamp
(поэтому вы, вероятно, не сможете получить правильный вывод). - person TLama   schedule 22.03.2015