ALTER TABLE tablename_ind ADD COLUMN ID AUTOINCREMENT PRIMARY KEY. Для дальнейшего переноса записей необходимо определить максимальное значение уникального поля

Вдовин М.

Фураева И. И.
к.ф.-м.н., доцент кафедры «Информатика и прикладная экономика»
Казахский университет экономики, финансов и международной торговли
г. Астана

АВТОМАТИЗИРОВАННОЕ РЕДАКТИРОВАНИЕ БАЗЫ ДАННЫХ

Можно с большой степенью достоверности утверждать, что большинство приложений, которые предназначены для выполнения хотя бы какой-нибудь полезной работы, тем или иным образом используют структурированную информацию или, другими словами, упорядоченные данные. Такими данными могут быть, например, списки заказов на тот или иной товар, списки предъявленных и оплаченных счетов или список телефонных номеров. Обычное расписание движения автобусов - это тоже пример упорядоченных данных.
При компьютерной обработке информации, упорядоченные каким-либо образом данные принято хранить в базах данных - особых файлах, использование которых вместе со специальными программными средствами позволяет пользователю как просматривать необходимую информацию, так и, по мере необходимости, манипулировать ею, например, добавлять, изменять, копировать, удалять, сортировать и т.д.
Таким образом, дать простое определение базы данных можно следующим образом. База данных - это набор информации, организованной тем, или иным способом. Базы данных могут содержать различные объекты, но основными объектами реляционной базы данных являются таблицы.
В реляционной базе данных таблицы связаны между собой: это позволяет с помощью единственного запроса найти все необходимые данные, которые могут находиться в нескольких таблицах. Простейшая реляционная база данных имеет хотя бы одну таблицу.
Каждая таблица в реляционной базе данных должна иметь первичный ключ – поле или комбинацию полей, которые единственным образом идентифицируют каждую строку таблицы. Если ключ состоит из нескольких полей, он называется составным. Ключ должен быть уникальным и однозначно определять запись. По значению ключа можно отыскать единственную запись. Ключи служат также для упорядочивания информации в БД.
Структуру двумерной таблицы образуют столбцы и строки. Их аналогами в структуре базы данных являются поля и записи.
Поля базы данных не просто определяют структуру – они также определяют групповые свойства данных, записываемых в ячейки, принадлежащие каждому из полей.
При преобразовании из одного формата баз данных в другой могут возникнуть проблемы. Речь пойдет о преобразовании в формат Access .mdb. При конвертации в данных из SQL Sever в этот формат, поле ключ теряет своё свойство счетчика и преобразуется в обычное целочисленное поле. Во многих СУБД эта проблема решается просто: либо изменением структуры таблицы и заменой типа поля, либо созданием нового поля и вставкой записей с правильно указанным ключом. К сожалению, в СУБД Access поле счетчик является неизменным извне и драйвер ODBC не позволяет изменять его значение. Можно создать новое поле-счетчик и тогда записи получат ключи отличающееся от начальных, но при этом нарушится связь между взаимосвязанными таблицами т.к. ключи могут быть непоследовательными из-за удаления некоторых записей. Для решения этой проблемы была написана программа, которая подходит для работы с любыми .mdb базами. Программа автоматически создает копии таблиц с уже добавленным полем-счетчиком и затем, путем перебора записей, переносит их в новые таблицы.
Копия таблиц создается следующим SQLкодом:

Select * Into tablename_ind From tablename Where 1 = 2

Где tablename_ind - название новой таблицы, tablename- название оригинальной таблицы, Where 1 = 2 – невыполнимое условие, используемое для того, что бы новая таблица скопировала только структуру оригинальной и не перенесла записи.
После создания таблицы изменяется её структура – добавляеться поле-счетчик:

ALTER TABLE tablename_ind ADD COLUMN ID AUTOINCREMENT PRIMARY KEY

Для дальнейшего переноса записей необходимо определить максимальное значение уникального поля:

Select top 1 * From tablename order by key desc,

где key – название поля-индефикатора в оригинальной таблице.

Для переноса самих записей используется цикл от 1 до N, где N– это максимальное значение поля счетчика, тем самым цикл совершается не по количеству записей из-за того, что в оригинальной таблице ключи могут содержать пропуски т.к. некоторые записи могли быть удалены. Необходимо сохранить последовательность ключей, поэтому для создания пропусков вставляются записи и сразу удаляются, тем самым создавая пропуски в счетчике. В приведенном ниже программном коде описывается процедура создания последовательных значений ключей, копирования имеющейся записи, и при необходимости ее удаления.

while not ADOT1.eof do
begin
i:=i+1;
Synchronize(SetProgress);
if i=ADOT1.FieldByName(Dictionary.Items[tablename]).AsInteger
then begin
ADOQ1.SQL.Text:= 'Insert into '+tablename+'_ind select * from ' + tablename+ ' where '+Dictionary.Items[tablename]+'='+IntToStr(i);
ADOQ1.ExecSQL;
ADOT1.Next
end
else begin
ADOQ1.SQL.Text:= 'Insert into '+tablename+'_ind select * from ' + tablename+ ' where '+Dictionary.Items[tablename]+'='+IntToStr(count);
ADOQ1.ExecSQL;
ADOQ1.SQL.Text:= 'Delete from '+tablename+'_ind where id ='+IntToStr(i);
ADOQ1.ExecSQL;
end;
end;

При запуске программы необходимо выбрать файл базы данных. После этого в списке таблиц появятся все таблицы, которые есть в выбранной базе. На Рис.1. представлена форма для выбора таблиц для последующего преобразования.


Рис.1. Выбор таблиц

При нажатии на имя таблицы в списке полей появляются имена всех полей выбранной таблицы. При выборе поля, которое преобразуется в поле счетчик, данная таблица отправляется в очередь для преобразования. В столбце Выбранные таблицы отображаются таблицы с указанием поля счетчик. Таблицу также можно удалить из очереди на преобразование, просто нажав на неё. Это особенно удобно на стадии отладки программы.
При нажати на кнопку Выполнить начнеться процесс преобразования. Весь интерфейс станет заблокированным для того чтобы, остановить изменения входных данных в процессе работы программы. За продвижением процесса позволит наблюдать полоса прогресса расположенная снизу программы, которая показывает количество уже обработанных таблиц и степень выполнения текущей обрабатываемой таблицы.


Рис.2. Процесс выполнения программы

Особенностью программного кода является возможность копирования таблиц с необязательными полями и незаполненными данными, как для полей, имеющих текстовый тип, так и числовой .
Литература
Когаловский М. Р. Энциклопедия технологий баз данных. М.: Финансы и статистика, 2002. – 235 с.
Кузнецов С. Д. Основы баз данных. 2-е изд. М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2007. – 314 с.
Дейт К. Дж. Введение в системы баз данных = Introduction to Database Systems. 8-е изд. М.: Вильямс, 2005. – 312 с.
Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика - Database Systems: A Practical Approach to Design, Implementation, and Management. 3-еизд. М.: Вильямс, 2003. – 416 с.










15

Приложенные файлы

  • doc 7066469
    Размер файла: 121 kB Загрузок: 0

Добавить комментарий