powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / SQLite [игнор отключен] [закрыт для гостей] / выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
6 сообщений из 6, страница 1 из 1
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40051985
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Исходные данные:
архив zip из нескольких файлов БД SQLite
Delphi
sqlite3.dll


Что выполняется:
- распаковка архива во временную папку;
- чтение каждого файла БД (файл БД содержит несколько таблиц): устанавливается соединение с каждой БД и выполняется Unidirectional Read каждой таблицы (SELECT * имя_таблицы) из файла БД;
- по окончании загрузки данных временная папка со всеми файлами удаляется.

Все прекрасно работает, пока не попадется сбойная таблица (как правило возникает сообщение 'database disk image is malformed').
Плохая ну и ладно, пропускаем.
Но! Файл БД при удалении временной папки не удаляется , все нормальные файлы удаляются! Остаются только временная папка и сбойный файл в ней.

Чтобы удалить этот плохой файл, нужно выгрузить программу (при этом выгружается и sqlite3.dll, внутри которой и остался открытый дескриптор файла) и только после этого его можно удалить. Программа не запоминает при выходе такие зависшие файлы, чтобы их удалить в последующем.

Пробовал на последней версии файла sqlite3.dll (3.34.1 от 20.01.21), как и на старых версиях.

Вопрос: существует ли способ проверить таблицу на корректность перед ее загрузкой с помощью SELECT (что-то вроде теста таблицы)?
...
Рейтинг: 0 / 0
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40052003
DHDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belotsky Serge,

Код: plsql
1.
PRAGMA integrity_check;
...
Рейтинг: 0 / 0
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40052015
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DHDD
Belotsky Serge,

Код: plsql
1.
PRAGMA integrity_check;


Работает, спасибо! Только, в моем случае, надо писать так:
Код: plsql
1.
PRAGMA integrity_check(table_name)


Возвращает 'ok', если все нормально.
И файл не блокирует, если ошибка.

В моем случае получил более развернутое сообщение:
'*** in database main ***'#$A'Page 512: btreeInitPage() returns error code 11'#$A'Page 511: btreeInitPage() returns error code 11'
...
Рейтинг: 0 / 0
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40052017
DHDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belotsky Serge,

Код: plsql
1.
PRAGMA integrity_check(bad_table_name);



integrity_check
ok
...
Рейтинг: 0 / 0
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40052097
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему логика другая должна быть: пишешь все во временную папку, удалением не заморачиваешься, но при очередном старте своей проги сначала все удаляешь из временной папки затем туда пишешь. Так ты и диск не особо закакаешь и после завершения работы проги кривые файлы можно поизучать.
...
Рейтинг: 0 / 0
выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
    #40052148
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
По-хорошему логика другая должна быть: пишешь все во временную папку, удалением не заморачиваешься, но при очередном старте своей проги сначала все удаляешь из временной папки затем туда пишешь. Так ты и диск не особо закакаешь и после завершения работы проги кривые файлы можно поизучать.


тоже можно, но временная папка для распаковки имеет самое разное имя (= имени архива zip без расширения). Короче лишние телодвижения, как оказалось, проще проверить БД на корректность перед загрузкой данных.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / выполнить закрытие файла БД после облома с SELECT * Table (ошибка таблицы)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (5), Yandex Bot 4 мин., Bing Bot 7 мин.
x
x
Закрыть


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