| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Статьи:: Delphi :: Delphi и Базы данных :: Обработка ошибки "Corrupt Memo/BLOB file" в базах данных, используя приложения Delphi
Обработка ошибки "Corrupt Memo/BLOB file" в базах данных, используя приложения Delphi
Наверняка, каждый разработчик приложений на языке Delphi, связанных с базами данных, сталкивался с такой огромной проблемой как обработка ошибок и провел немало времени в борьбе с ними. Моя историческая встреча с этой проблемой произошла при визуализации вот такого сообщения:
рис.1. Ошибка эта появляется в случае, когда Мемо-поле в базе данных не было записано корректно. Ситуация эта происходит как правило в приложениях, использующих редактирование данных в Мемо-полях на какой-то промежуток времени. На период редактирования Мемо-поля, в файле *.dbf помещается ссылка на временный файл, расположенный где-нибудь в C:TEMP или C:windowsTEMP. База данных в это время открыта и «ждет» окончания редактирования Мемо-поля и операции сохранения всей записи, включая записи Мемо-поля в *.dbt файл. После того, как редактирование окончено, запись сохраняется в dbf-файл базы данных, а Мемо-поле записывается в dbt-файл. При этом в Мемо-поле остается ссылка на dbt-файл, где собственно и расположено содержимое Мемо-поля. Различного рода факторы, влияющие на разрыв соединения между файлом базы данных и приложением, его открывшем и производящего редактирование, ведут к тому, что связь между ними обрывается и в Мемо-поле остается ссылка на временный файл, а данные оказываются утерянными и не записанными в файлы dbt и dbf базы данных. После чего, при чтении записи с таким «прошлым», приводит к наблюдению рис.1. 2) Создать копию файла с ошибкой, очистить его полностью. Открыть два файла баз данных – с ошибкой и чистый. Считывать в базе данных с ошибкой по одному значению и заполнять соответствующие им значения в чистой «зеркальной» базе данных. В итоге, все ошибочные ссылки в Мемо-полях будут устранены. Первый метод, конечно, более
сложный и непредсказуемый, так как в записи может быть несколько Мемо-полей, а
полностью считать запись, если там присутствует ошибка, невозможно.
Второй метод, метод «прогона», на практике оказался более эффективным – все, что могло, то считалось и скопировалось в новую базу данных. Теперь о реализации второго метода обработки ошибки. Используя классический прием обработки ошибок в Delphi блоком try..except для реализации метода №2 приходим к следующему коду: procedure CorrectDataBase; var i,fc:integer; Name1,Name2,Dir1:string; begin //указываем расположение и имя базы данных с ошибкой Table1.DatabaseName:=Dir1; Table1.TableName:=Name1; Table1.Open;
//производим копирование базы данных, получаем новую базу данных с именем Name2 QuickCopy(Table1, Name2, true);
//очищаем в копии от всех записей Table2.TableName:=Name2; Table2.DatabaseName:=Dir1; Table2.EmptyTable;
//открываем копию для предстоящей работы Table2.Open;
//вводим переменную, определяющую количество полей в базе fc:=0;
//начинаем перебирать базу данных, используя за один проход одно поле while fc < Table1.FieldCount-1 do
begin
Table2.First;
Table1.First;
try for
i:=0 to Table1.RecordCount-1 do
begin if fc=0 then
begin //добавляем записи при первом проходе Table2.Append; //присваиваем значение в чистой базе данных значению в базе с ошибкой Table2.Fields[fc].Value:=Table1.Fields[fc].Value;
end
else
begin //при втором проходе только редактируем записи
Table2.Edit;
Table2.Fields[fc].Value:=Table1.Fields[fc].Value; //сохраняем запись Table2.Post; //переходим на одну запись вперед Table2.Next;
end;
Table1.Next; end; //в случае ошибки исполняем следующий код
except
on
E:DBErrorEngine do
begin if fc=0 then
begin Table2.Append; //в поле пишем строку с текстом ошибки Table2.Fields[fc].Value:='Ошибка:'+#13#10+E.Message; end else
begin
Table2.Edit;
Table2.Fields[fc].Value:='Ошибка:'+#13#10+E.Message;
Table2.Post; end;
Table1.Next;
Table2.Next; end; end; //увеличиваем счетчик полей fc:=fc+1; end; //закрываем базы Table1.Close; Table2.Close; end; Успехов Вам в неблагодарном деле борьбы с ошибками! архив статьи в формате Microsoft Word (7 Кб) Владимир Богдановский, delphi-ex.narod.ru Рубрика: Delphi и Базы данных
HTML 5: пять вещей вызывающих особый интер....
HTML 5 — это грядущее обновление гипертекстового языка разметки, основного способа создания контента для размещения его во всемирной паутине. Разработка HTML остановилась в 1999 году, на версии HTML 4.01 и с тех пор web-содержимое изменилось так, что текущие спецификации HTML перестали соответствовать сегодняшним требованиям. HTML 5 нацелен на то, чтобы увеличить функциональную совместимость HTML и соответствовать растущим требованиям разнообразного и смешанного web-контента. HTML 5 так же нацелен на устранение недостатков четвертой версии. В этой статье мы взглянем на 5 новых интересных вещей в HTML 5.
Подробнее... |
Рубрика: Html
| Добавлено: 22.12.2008
asp.net: ListView с разных сторон.
Элемент управления ListView был представлен в .Net Framework 3.5 как замена устаревшему GridView. Новый элемент имеет более расширенный функционал, чем его предшественник, но в тоже время лишен некоторых внутренних механизмов, что впрочем целиком следствие из расширенной универсальности ListView. Среди отличий ListView и GridView можно назвать и гибкую настройку разметки, что позволяет выводить данные не только в табличном виде, но и вообще в любом каком пожелает программист. Благодаря шаблонам ItemTemplate, EditItemTemplate, InsertItemTeplate можно настроить внешний вид при любом из состояний ListView: редактировании или выборе элемента.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Создание кросс-таб отчета в Stimulsoft Rep....
Компания Стимулсофт предоставляет для разработчиков мощный набор инструментов для создания отчетов для Microsoft Visual Studio .Net 2005 и 2008; эти инструменты доступны как для Windows Forms, так и для Web Forms. Это генератор отчетов Stimulsoft Reports.Net. Генератор отчетов Stimulsoft Reports.Net имеет ряд особенностей: простая работа с дизайнером отчетов, полная поддержка экспорта в PDF, Word, Excel и многие другие форматы. Crystal Report и Microsoft Reporting Service – очень хорошие программные продукты для повседневной работы, но, если Вам необходимо создать отчеты с поддержкой кросс-табов, drill down, Ajax, штрих-кодов и возможностью подключения одновременно более одного источника данных, то Stimulsoft Reports.Net поможет Вам сэкономить массу времени. Также, данный генератор отчетов позволяет пользователям создавать свои собственные отчеты любой сложности. И все эти особенности делают Stimulsoft Reports.Net хорошим выбором в сфере программных продуктов для Business Intelligence.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|