Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
FireDAC + SQLite + Spatialite. Select поля geom возвращает WideString вместо BLOB
|
|||
|---|---|---|---|
|
#18+
Для работы с локальными картами используется связка: FireDAC + SQLite + Spatialite (расширение SQLite) Есть таблица с полем geom типа GEOMETRY, добавленным функцией Spatialite AddGeometryColumn() Геометрия возвращается с помощью функции Spatialite AsBinary(geom) - выдаёт BLOB В общем, всё работает. Но на пространственных запросах с некоторыми координатами вместо BLOB выдаётся WideString длиной 2 и с содержимым #1#2 (SOH STH) Остальные поля запроса в порядке. Явное приведение к блобу select (cast(asbinary(geom) as blob)) не помогает. если вместо asbinary() использовать ST_AsBinary() - почему-то помогает, хотя из доки непонятно, в чём между ними разница. Но не во всех случаях. Чаще всего на запросах, которые возвращают 0 строк, и столбец генерируется такой: FDQuery.Fields[..].DataType = ftWideString И ещё, такая закономерность: если запрос вот так заглючит, а затем ему передать параметры (границы карты), где данные есть, он продолжает выдавать WideString вместо BLOB Я понимаю, вопросы здесь к расширению Spatialite, но всё равно неясно: 1. Почему FireDAC меняет тип столбца после Open (видимо, пытаясь автоопределить по содержимому #1#2) 2. Какие есть предположения, почему ST_AsBinary может выдавать #1#2 и что это за признак 3. Возможно ли, что это глюк FireDAC, а не Spatialite? Если что, запрос пространственный такой: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. RAD Studio 10.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2021, 13:36 |
|
||
|
FireDAC + SQLite + Spatialite. Select поля geom возвращает WideString вместо BLOB
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2021, 15:40 |
|
||
|
FireDAC + SQLite + Spatialite. Select поля geom возвращает WideString вместо BLOB
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, И снова СПАСИБО! документацияFor an expression in a SELECT list, SQLite avoids type name information. When the result set is not empty, FireDAC uses the value data types from the first record. When empty, FireDAC describes those columns as dtWideString. To explicitly specify the column data type, append ::<type name> to the column alias: SELECT count(*) as "cnt::INT" FROM mytab Поменял cast(st_asbinary(geom) as blob) на st_asbinary(geom) as "geom::blob", и не вижу повторения эффекта! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2021, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40061760&tid=2037411]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 291ms |

| 0 / 0 |
