|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Добрый день! Нужно прочитать вещественное значение поля объявленное как INTEGER в одной таблице БД. И у меня что-то не выходит (читается только как целое). Для проверки сделал свой код. Для работы с SQLite используется TSQLConnection (dbExpress). Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
При этом SQLite Expert показывает корректное вещественное значение (см. скриншот), но выполняет нестандартное фоновое выделение. Пробовал разные AsXXX (AsString, AsVariant, AsSingle) - всегда возвращается целое значение. БД не моя, мне нужно прочитать корректное вещественное значение. Как это можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2019, 16:45 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Belotsky Serge, какой DBExpress драйвер для SQLite используете, DDL таблицы? Params.CreateParam(TFieldType.ftInteger,'Field1',ptInput); TFieldType.ftInteger ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 07:06 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
pit_alexBelotsky Serge, какой DBExpress драйвер для SQLite используете, DDL таблицы? Params.CreateParam(TFieldType.ftInteger,'Field1',ptInput); TFieldType.ftInteger ??? Честно говоря, не знаю где она берет этот драйвер (Delphi XE3). Делал я на примерах этого ресурса: https://www.webdelphi.ru/2012/10/sqlite-v-delphi-xe3/ https://www.webdelphi.ru/2013/01/sqlite-v-delphi-xe3-2/ Настраиваю я соединение примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Поле объявлено вот так: Код: sql 1.
Да, я обратил внимание, что параметр объявлен как TFieldType.ftInteger . Но опять же, мне нужно было полностью сымитировать занесение данных как оригинальной таблице БД. (БД не моя). Я проделал это с ftFloat, данные записались в таблицу точно также. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 07:59 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Belotsky Serge, Тип поля какой? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 08:32 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
pit_alexBelotsky Serge, Тип поля какой? Не понимаю вопрос, вроде INTEGER. См. скриншот. В поле типа INTEGER занесено значение 11.3. Вопрос: как его прочитать как '11.3', а не как '11'. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 08:52 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
ИМХО вопрос не по SQLite, а по Дельфи, из которого чтение идет. Советую спросить в форуме по Делфи ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 09:16 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Удалось прочитать при помощи вот этого wrapper (Plashenkov): https://github.com/plashenkov/SQLite3-Delphi-FPC Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
Данный враппер базируется на sqlite3.dll. Вопрос: а при помощи чистого dbExpress (без подключения dll) - это можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 09:27 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Belotsky Serge, PS: Дальнейшие эксперименты, показали, что через dbExpress также нормально читаются вещественные значения из полей типа INTEGER, но только для таблиц, которые я сам создал и заполнил. Оригинальные же таблицы корректно можно прочитать только через враппер (т.е. через sqlite3.dll). Через dbExpress почему-то упорно возвращаются целочисленные значения. В чем разница между этими БД понять не могу, для меня они практически одинаковые. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:46 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Belotsky Serge, в sqlite можно создавать колонки с ЛЮБЫМИ типами данных, т.е. Код: sql 1.
и вставлять любые значения в любые поля, в Delphi не может быть разных типов данных для разных записей в одном поле. SLite3.dll это движок самого SQLite и стандартный dbExpress драйвер то же работает через эту либу. Либо создавайте поле FLOAT и будет вам счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:58 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
pit_alexBelotsky Serge, SLite3.dll это движок самого SQLite и стандартный dbExpress драйвер то же работает через эту либу. ??? Либо создавайте поле FLOAT и будет вам счастье Еще раз: оригинальная БД - чужая , я не могу задать FLOAT! Она ко мне поступает готовая. Я только хочу ее прочитать корректно. Если я сделаю аналог этой БД и/или таблицы таблицы (неважно как: через dbExpress или через SQLite3.dll), то у меня корректно получается ее прочитать (любым способом: через dbExpress или SQLite3.dll). А вот прочитать оригинальную БД корректно у меня получается только через SQLite.dll, dbExpress здесь почему-то не работает :( ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 11:10 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Belotsky SergeВ поле типа INTEGER занесено значение 11.3. Вопрос: как его прочитать как '11.3', а не как '11'. Может я сильно тупой, но КАК в поле integer может быть значение 11.3 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 16:39 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevBelotsky SergeВ поле типа INTEGER занесено значение 11.3. Вопрос: как его прочитать как '11.3', а не как '11'. Может я сильно тупой, но КАК в поле integer может быть значение 11.3 ? В SQLite нетипизированные поля. https://www.sqlite.org/datatype3.html SQLite uses a more general dynamic type system. In SQLite, the datatype of a value is associated with the value itself, not with its container. The dynamic type system of SQLite is backwards compatible with the more common static type systems of other database engines in the sense that SQL statements that work on statically typed databases should work the same way in SQLite. However, the dynamic typing in SQLite allows it to do things which are not possible in traditional rigidly typed databases. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 16:45 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
IMHO Подозреваю, тогда так же, как и в других СУБД. Привести в SELECT поле к нужному/правильному типу (float) и не изврашаться. Беглый поиск по доке говорит, что конструкция CAST в SQLLite присутствует. https://www.sqlite.org/lang_expr.html Не проверял. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 17:00 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevBelotsky SergeВ поле типа INTEGER занесено значение 11.3. Вопрос: как его прочитать как '11.3', а не как '11'. Может я сильно тупой, но КАК в поле integer может быть значение 11.3 ? Вот HEX представление значения этого поля. Можете проверить, это double = 11.3. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 17:20 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
IMHO Если сделать CAST в float (в SELECT), то думаю Delphi должен нормально прочитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 17:24 |
|
прочитать значение поле INTEGER как float
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevIMHO Подозреваю, тогда так же, как и в других СУБД. Привести в SELECT поле к нужному/правильному типу (float) и не изврашаться. Беглый поиск по доке говорит, что конструкция CAST в SQLLite присутствует. https://www.sqlite.org/lang_expr.html Не проверял. Да, так можно получить корректное значение. Завтра еще раз перепроверю. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 17:45 |
|
|
start [/forum/topic.php?fid=54&msg=39806064&tid=2008395]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 141ms |
0 / 0 |