powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQLite UniDAC и Int64
14 сообщений из 14, страница 1 из 1
SQLite UniDAC и Int64
    #40105133
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Пользую компоненты UNIDAC для доступа к БД SQLite.
Там таблица messages

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE messages (
    id                      INTEGER PRIMARY KEY AUTOINCREMENT,
    status                   INTEGER,
    data                     TEXT,
    send_timestamp           INTEGER
);



send_timestamp содержит значение int64

При попытке чтения поля send_timestamp получаю неверное значение, похоже что просто int.
Код: pascal
1.
send_timestamp := querySQLITE.FieldByName('send_timestamp').asLargeInt



Подскажите, пжалста, как лечить?
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105134
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалил повтор
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105149
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segor
Всем привет!
Пользую компоненты UNIDAC для доступа к БД SQLite.
Там таблица messages

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE messages (
    id                      INTEGER PRIMARY KEY AUTOINCREMENT,
    status                   INTEGER,
    data                     TEXT,
    send_timestamp           INTEGER
);



send_timestamp содержит значение int64

При попытке чтения поля send_timestamp получаю неверное значение, похоже что просто int.
Код: pascal
1.
send_timestamp := querySQLITE.FieldByName('send_timestamp').asLargeInt



Подскажите, пжалста, как лечить?
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105153
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ,
эммм... ну в SQLite оно объявляется как INTEGER
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105174
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего надо в таблице нормально объявить, тогда юнидак увидит, что это беззнаковое целое. В крайнем случае у юнидака есть настройки типа Data Mapping, и там вручную можно указать, у какой колонки какой тип данных должен быть использован.
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105196
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы поле "send_timestamp" было представлено типом LargeInt Вы можете применить один из 3-х способов :

1) использовать опцию соединения IntegerAsLargeInt : https://www.devart.com/unidac/docs/using-sqlite.htm
2) использовать DataTypeMapping, например
Код: pascal
1.
2.
3.
4.
         ...
         UniQuery.DataTypeMap.AddFieldNameRule('send_timestamp', ftLargeint);
         UniQuery.Open;
         ...


3) объявить поле "send_timestamp" в таблице "messages" как BIGINT
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105220
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JayDi,

К сожалению, в БД ничего менять нельзя. Нужно как-то решать на клиенте.
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105222
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
devart,

Пробовал через редактор свойств компонента query прописать 2 правила data type mapping. Общее и для конкретного поля. Не помогло.
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105231
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скрины значений поля из базы и из дебаггера:
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105238
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
devart
Для того, чтобы поле "send_timestamp" было представлено типом LargeInt Вы можете применить один из 3-х способов :

1) использовать опцию соединения IntegerAsLargeInt : https://www.devart.com/unidac/docs/using-sqlite.htm
2) использовать DataTypeMapping, например
Код: pascal
1.
2.
3.
4.
         ...
         UniQuery.DataTypeMap.AddFieldNameRule('send_timestamp', ftLargeint);
         UniQuery.Open;
         ...


3) объявить поле "send_timestamp" в таблице "messages" как BIGINT


по п.1 такую опцию не нашел у TUNIConnection.
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105249
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segor,

после настройки дата меппинга надо пересоздать поля в датасете (если они были созданы до этого).
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105258
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опция соединения IntegerAsLargeInt была добавлена в последней версии UniDAC 9.0.1. Таким образом, если изменять тип поля в БД нельзя и Вы используете одну из устаревших версий UniDAC,
единственным способом решения является использование DataTypeMapping
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105343
segor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segor
devart,

Пробовал через редактор свойств компонента query прописать 2 правила data type mapping. Общее и для конкретного поля. Не помогло.


ну вот такой способ у меня не работает. Или я что-то не так указал?
...
Рейтинг: 0 / 0
SQLite UniDAC и Int64
    #40105466
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следующий фрагмент кода демонстрирует применение правила DataTypeMapping для поля 'send_timestamp' :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
var
  UniQuery: TUniQuery;
  Value: Int64;
begin
  ...
  UniConnection.ExecSQL('Insert Into messages (status, data, send_timestamp) Values (1, ''String Data'', 1634114415000)');
  UniQuery := TUniQuery.Create(nil);
  try
    UniQuery.Connection := UniConnection;
    UniQuery.SQL.Text := 'Select * From messages';
    UniQuery.DataTypeMap.AddFieldNameRule('send_timestamp', ftLargeint);
    UniQuery.Open;
    Value := UniQuery.FieldByName('send_timestamp').AsLargeInt;
  finally
    UniQuery.Free;
  end;
  ...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQLite UniDAC и Int64
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]