Вверх ↑
Этот топик читают: Гость
Ответов: 952
Рейтинг: 4
#1546: 2018-10-23 13:21:15 ЛС | профиль | цитата
Скачал мод SQLite components mod 2018-04-04.zip. Скопировал с заменой файлы в code и conf - теперь ошибка при компиляции:

D:\Program Files (x86)\HiAsm\Elements\delphi\code\WinLayout.pas(159) Warning: Variable 'd' might not have been initialized

D:\Program Files (x86)\HiAsm\Elements\delphi\code\WinLayout.pas(176) Warning: Variable 'd' might not have been initialized

D:\Program Files (x86)\HiAsm\Elements\delphi\code\WinLayout.pas(40) Hint: Private symbol '_onObjDestroy' declared but never used

D:\Program Files (x86)\HiAsm\Elements\delphi\code\hiMenu.pas(13) Hint: Private symbol 'SetMenuString' declared but never used

D:\Program Files (x86)\HiAsm\Elements\delphi\code\hiSQLite_Query.pas(78) Error: Undeclared identifier: 'ReadObject'

D:\Program Files (x86)\HiAsm\Elements\delphi\code\hiSQLite_Query.pas(102) Error: Undeclared identifier: 'ReadObject'

D:\Program Files (x86)\HiAsm\Elements\delphi\code\hiChildPanelEx_2579080.pas(12) Fatal: Could not compile used unit 'hiSQLite_Query.pas'
Сборка завершена.

Если вернуть старую длл от 2006г - все работает. Обновляю - снова кирдык, запрос выдает чепуху.
3.15 с офсайта тоже выдает чепуху.

Редактировалось 3 раз(а), последний 2018-10-23 13:43:56
карма: 0

0
Ответов: 4621
Рейтинг: 746
#1547: 2018-10-23 14:40:59 ЛС | профиль | цитата
Обновлять не надо. Имелось в виду что если у тебя есть этот мод - то обратить внимание на свойство Charset. А нет - то ничего не делать.
Причина ошибок - у тебя, наверное, давно не обновлялся весь пакет. Может и компоненты SQLLite с новой DLL из-за этого ненормально работают.

Редактировалось 2 раз(а), последний 2018-10-23 14:41:45
карма: 26

0
Ответов: 952
Рейтинг: 4
#1548: 2018-10-23 16:35:56 ЛС | профиль | цитата
HiAsm у меня установлен с марта 2011 года. Версия 4.04 b185
Да, возможно не обновлял, но вряд ли в этом причина неработоспособности с новой длл.
Новая длл от идущей в комплекте отличается по размерам почти в 3 раза.

А что за версия dll идет в комплекте с HiAsm?
Перекачал все версии sqlite3.dll, вплоть до 3.6.0 - ни одна не работает адекватно. С чем же работает HiAsm?
Кстати ссылки во втором сообщении этой темы на Версия 3.7.5 c ICU 3.8.1 (моя сборка) и прочие - протухли.

Редактировалось 1 раз(а), последний 2018-10-23 19:16:12
карма: 0

0
Ответов: 952
Рейтинг: 4
#1549: 2018-10-23 22:16:37 ЛС | профиль | цитата
Прочитал всю тему с 1 страницы, везде только упоминания (в основном от Tad) о проблемах LIKE и русских символах.
Пару раз натыкался на substr, но у меня кол-во символов в искомом слове неизвестно. Поиск я ведь хочу вести по части слова - %нефть%, %теле% и т.д. Что может быть как Сибнефтьгаз, Атомнефтькалий, Первая компания нефтьгаз и т.д.
Регистронезависимость меня пока не интересует, разобраться бы с поиском по части....
Конечно, пока прога работает и на старой версии dll, но есть пара функций которые хотелось бы добавить, а они требуют новой версии dll

П.С. Удалось узнать версию длл-ки в комплекте HiAsm - 3.3.7

Редактировалось 1 раз(а), последний 2018-10-23 23:04:12
карма: 0

0
Ответов: 952
Рейтинг: 4
#1550: 2018-10-24 00:04:02 ЛС | профиль | цитата
Итак, методом научного тыка, а проще говоря перебором всех длл-ок начиная с версии 3.3.7, установил, что LIKE сломали при переходе с версии 3.3.17 на версию 3.4.0
Версия 3.3.17 без проблем работает с поиском LIKE по части слова на кириллице.
Вот описание изменений:
2007-06-18 (3.4.0)
Fix a bug that can lead to database corruption if an SQLITE_BUSY error occurs in the middle of an explicit transaction and that transaction is later committed. Ticket #2409. See the CorruptionFollowingBusyError wiki page for details.
Fix a bug that can lead to database corruption if autovacuum mode is on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement which itself follows a cache overflow inside a transaction. See ticket #2418.
Added explicit upper bounds on the sizes and quantities of things SQLite can process. This change might cause compatibility problems for applications that use SQLite in the extreme, which is why the current release is 3.4.0 instead of 3.3.18.
Added support for Incremental BLOB I/O.
Added the sqlite3_bind_zeroblob() API and the zeroblob() SQL function.
Added support for Incremental Vacuum.
Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support ARM7 processors with goofy endianness.
Removed all instances of sprintf() and strcpy() from the core library.
Added support for International Components for Unicode (ICU) to the full-text search extensions.
In the Windows OS driver, reacquire a SHARED lock if an attempt to acquire an EXCLUSIVE lock fails. Ticket #2354
Fix the REPLACE() function so that it returns NULL if the second argument is an empty string. Ticket #2324.
Document the hazards of type conversions in sqlite3_column_blob() and related APIs. Fix unnecessary type conversions. Ticket #2321.
Internationalization of the TRIM() function. Ticket #2323
Use memmove() instead of memcpy() when moving between memory regions that might overlap. Ticket #2334
Fix an optimizer bug involving subqueries in a compound SELECT that has both an ORDER BY and a LIMIT clause. Ticket #2339.
Make sure the sqlite3_snprintf() interface does not zero-terminate the buffer if the buffer size is less than 1. Ticket #2341
Fix the built-in printf logic so that it prints "NaN" not "Inf" for floating-point NaNs. Ticket #2345
When converting BLOB to TEXT, use the text encoding of the main database. Ticket #2349
Keep the full precision of integers (if possible) when casting to NUMERIC. Ticket #2364
Fix a bug in the handling of UTF16 codepoint 0xE000
Consider explicit collate clauses when matching WHERE constraints to indices in the query optimizer. Ticket #2391
Fix the query optimizer to correctly handle constant expressions in the ON clause of a LEFT JOIN. Ticket #2403
Fix the query optimizer to handle rowid comparisons to NULL correctly. Ticket #2404
Fix many potential segfaults that could be caused by malicious SQL statements.
2007-04-25 (3.3.17)
When the "write_version" value of the database header is larger than what the library understands, make the database read-only instead of unreadable.
Other minor bug fixes

Из него конечно мне мало что понятно, но все же. Возможно возвернуть взад поддержку поиска в крайней версии?

Редактировалось 1 раз(а), последний 2018-10-24 00:07:38
карма: 0

0
Ответов: 4621
Рейтинг: 746
#1551: 2018-10-24 11:47:44 ЛС | профиль | цитата
В представленном списке изменений ничего подходящего касательно кодировок не увидел. Кроме
When converting BLOB to TEXT, use the text encoding of the main database.
Если у тебя текстовые поля объявлены как BLOB - в этом может быть причина.

user_asm писал(а):
Да, на старой, примером моя база отлично открывается и все записи читаемы.
Вот это непонятно: ты пробовал свои запросы делать в примере с новой DLL (по кнопке Query)? Работает или нет?

Я проверил в примере последнюю DLL с оф. сайта - 3.25.2.0. 'LIKE' как работал, так и работает.
карма: 26

0
Ответов: 952
Рейтинг: 4
#1552: 2018-10-24 12:42:54 ЛС | профиль | цитата
Пробовал, запрос проходит, но выдает чепуху. Особенно со словами где встречаются буквы - Ы, ь, я и т.д.
К примеру LIKE '%АТП №19%' проходит, выдает что и положено.
LIKE '%нефть%' не проходит, вываливает кучу записей совершенно не связанных с этим словом.

П.С. Никаких блобов нет, все в TEXT.
И еще, если ввести Zakaz LIKE 'МТС'выведет все записи в которых будут слова МТС, ГТС, ПГС и т.д. Т.е. 3 буквенные.
А если изменить и ввести Zakaz LIKE '%МТС%' - вывалит кучу записей совершенно не связанных с этими буквами.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ это я все в примере SQLLite_Demo делаю, подключившись к своей базе, предварительно заменив дллку на последнюю 3.25.2

Редактировалось 3 раз(а), последний 2018-10-24 12:57:12
карма: 0

0
Ответов: 4621
Рейтинг: 746
#1553: 2018-10-24 15:21:19 ЛС | профиль | цитата
Да, вижу проблему:


Кто что знает об этом?
карма: 26

0
Ответов: 952
Рейтинг: 4
#1554: 2018-10-24 20:05:32 ЛС | профиль | цитата
Воооот, и я об этом уже которую страницу.
До релиза 3.4.0 все работает нормально, после него такая фигня.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#1555: 2018-10-25 12:55:05 ЛС | профиль | цитата
Если с помощью моих модифицированных компонентов работать с БД в кодировке UTF-8, то всё работает правильно.

Предполагаю, можно реализовать свою функцию сравнения с помощью sqlite3_create_collation() - создать COLLATION и указывать при определении столбцов или в запросах.

Редактировалось 1 раз(а), последний 2018-10-25 13:06:56
карма: 26

0
Ответов: 16884
Рейтинг: 1239
#1556: 2018-10-25 15:13:18 ЛС | профиль | цитата
«Горе от ума» (1824) А. С. Грибоедова писал(а):
Блажен, кто верует, тепло ему на свете!

У user_asm БД в ANSI.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4621
Рейтинг: 746
#1557: 2018-10-25 15:33:00 ЛС | профиль | цитата
Естественно, под "работой с БД в UTF-8" имелось в виду занесение данных в UTF-8, а если данные уже внесены - нужно переконвертировать.

Вообще, создание своей COLLATION функции решит эту проблему, и как я понимаю, необходимо даже для UTF-8 в других случаях (например, сортировка по текстовым полям), поскольку в SQLite нет стандартной функции сортировки для UTF-8.

Редактировалось 2 раз(а), последний 2018-10-25 15:52:36
карма: 26

0
Ответов: 952
Рейтинг: 4
#1558: 2018-10-25 16:46:49 ЛС | профиль | цитата
Tad писал(а):
У user_asm БД в ANSI.

Что это значит, как это проверить и возможно ли исправить?
карма: 0

0
Ответов: 4621
Рейтинг: 746
#1559: 2018-10-25 17:36:26 ЛС | профиль | цитата
user_asm писал(а):
Что это значит
Программа в пакете Delphi использует строки в кодировке ANSI (например, Windows-1251). Если ты пишешь в свою БД и читаешь из неё данные без каких-либо преобразований кодировок со своей стороны - то твои данные в БД находятся тоже в кодировке ANSI. "Исправить" можно, если запрос перед выполнением преобразовывать в UTF-8 с помощью компонента Charset, и в обратную сторону - считываемые из БД данные. Либо использовать мои модифицированные компоненты со свойством Charset. В обеих случаях существующие в БД строки нужно преобразовать в UTF-8 (считать как ANSI, преобразовать в UTF-8 и записать обратно).

Редактировалось 1 раз(а), последний 2018-10-25 17:36:51
карма: 26

0
Ответов: 16884
Рейтинг: 1239
#1560: 2018-10-25 18:12:32 ЛС | профиль | цитата
user_asm, что тебя заставляет перейти на новую DLL?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)