Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.03.2021, 16:10
|
|||
---|---|---|---|
|
|||
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
Добрый день! Исходные данные: архив zip из нескольких файлов БД SQLite Delphi sqlite3.dll Что выполняется: - распаковка архива во временную папку; - чтение каждого файла БД (файл БД содержит несколько таблиц): устанавливается соединение с каждой БД и выполняется Unidirectional Read каждой таблицы (SELECT * имя_таблицы) из файла БД; - по окончании загрузки данных временная папка со всеми файлами удаляется. Все прекрасно работает, пока не попадется сбойная таблица (как правило возникает сообщение 'database disk image is malformed'). Плохая ну и ладно, пропускаем. Но! Файл БД при удалении временной папки не удаляется , все нормальные файлы удаляются! Остаются только временная папка и сбойный файл в ней. Чтобы удалить этот плохой файл, нужно выгрузить программу (при этом выгружается и sqlite3.dll, внутри которой и остался открытый дескриптор файла) и только после этого его можно удалить. Программа не запоминает при выходе такие зависшие файлы, чтобы их удалить в последующем. Пробовал на последней версии файла sqlite3.dll (3.34.1 от 20.01.21), как и на старых версиях. Вопрос: существует ли способ проверить таблицу на корректность перед ее загрузкой с помощью SELECT (что-то вроде теста таблицы)? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.03.2021, 16:49
|
|||
---|---|---|---|
|
|||
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
Belotsky Serge, Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.03.2021, 17:11
|
|||
---|---|---|---|
|
|||
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
DHDD Belotsky Serge, Код: plsql 1.
Работает, спасибо! Только, в моем случае, надо писать так: Код: plsql 1.
Возвращает 'ok', если все нормально. И файл не блокирует, если ошибка. В моем случае получил более развернутое сообщение: '*** in database main ***'#$A'Page 512: btreeInitPage() returns error code 11'#$A'Page 511: btreeInitPage() returns error code 11' ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.03.2021, 17:14
|
|||
---|---|---|---|
|
|||
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
Belotsky Serge, Код: plsql 1.
integrity_check ok ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.03.2021, 20:47
|
|||
---|---|---|---|
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
По-хорошему логика другая должна быть: пишешь все во временную папку, удалением не заморачиваешься, но при очередном старте своей проги сначала все удаляешь из временной папки затем туда пишешь. Так ты и диск не особо закакаешь и после завершения работы проги кривые файлы можно поизучать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.03.2021, 08:04
|
|||
---|---|---|---|
|
|||
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы) |
|||
#18+
Dima T По-хорошему логика другая должна быть: пишешь все во временную папку, удалением не заморачиваешься, но при очередном старте своей проги сначала все удаляешь из временной папки затем туда пишешь. Так ты и диск не особо закакаешь и после завершения работы проги кривые файлы можно поизучать. тоже можно, но временная папка для распаковки имеет самое разное имя (= имени архива zip без расширения). Короче лишние телодвижения, как оказалось, проще проверить БД на корректность перед загрузкой данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=54&mobile=1&tid=2008338]: |
0ms |
get settings: |
19ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
56ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
126ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 513ms |
0 / 0 |