Вы находитесь на странице: 1из 7

2

ВВЕДЕНИЕ
Работа посвящена проблеме обработки документов разных форматов. В
частности работе с форматами Excel и Paradox в системах баз данных.
Эта проблема часто возникает у фирм, где есть филиалы и некоторые из
них хранят данные в формате Excel, а в главном офисе установлена система
баз данных, которая хранит данные в формате Paradox. В этом случае
возникает проблема: офисная система баз данных не читает формат Excel.
Причем, начиная с версии Excel 2000 эта проблема не разрешима в принципе.
3

1 ОБЗОР ИЗВЕСТНЫХ РЕШЕНИЙ


Одно из решений данной проблемы было найдено в статье Елмановой
[1]. Оно основано на применении контроллеров автоматизации MS Office.
Контроллер автоматизации — это приложение, которое управляет СОМ-
сервером. Он представляет собой любое приложение MS Office. В данном
случае контроллер автоматизации — это MS Excel. Преобразование данных
формата Excel к Paradox в этом случае в коде можно записать так [2]:

MSExcel, MSExcelBook, MSExcelSheet: Variant;


Cel1, i: Integer;
Cell2: String;
begin
MSExcel := CreateOleObject('Excel.Application');
MSExcelBook := MSExcel.WorkBooks.Open('C:\Test.xls');
MSExcelSheet := MSExcelBook.WorkSheets[1];

for i := 3 downto 1 do
begin
Cel1 := MSExcelSheet.Cells[i, 1].Value;
Cell2:= MSExcelSheet.Cells[i, 2].Value;
Table1.Insert;
Table1.Fields[0].AsInteger := Cel1;
Table1.Fields[1].AsString := Cell2;
Table1.Post;
end;
MSExcel.Quit;

У данного решения есть недостаток. Дело в том, что в случае если в


таблице Excel колонок больше двух, то необходимо изменить код Delphi-
приложения. Например, если в таблице Excel три колонки, то код будет
выглядеть так:

MSExcel, MSExcelBook, MSExcelSheet: Variant;


Cel1, i: Integer;
Cell2: String;
Cell3: String;
begin
4

MSExcel := CreateOleObject('Excel.Application');
MSExcelBook := MSExcel.WorkBooks.Open('C:\Test.xls');
MSExcelSheet := MSExcelBook.WorkSheets[1];

for i := 3 downto 1 do
begin
Cel1 := MSExcelSheet.Cells[i, 1].Value;
Cell2:= MSExcelSheet.Cells[i, 2].Value;
Cell3:= MSExcelSheet.Cells[i, 3].Value;
Table1.Insert;
Table1.Fields[0].AsInteger := Cel1;
Table1.Fields[1].AsString := Cell2;
Table1.Fields[2].AsString := Cell3;
Table1.Post;
end;
MSExcel.Quit;

Добавленный код изображен курсивом.


Изменение кода приложения для каждой таблицы Excel может привести
к внесению ошибок в код. Кроме того, каждый раз необходимо
перекомпилировать код. Для этого каждый раз необходимо обращаться к
программисту за помощью.
Известно также решение, которое предложено Ольгой Сосонных [4].
Однако у него очень много возможностей, в которых нет необходимости в
рассматриваемом случае. Кроме того, стоимость ее библиотек составляет 65
долларов. Мы решили не переплачивать за возможности, которые мы не
будем использовать.
В результате анализа известных решений цель работы была
сформулирована так: разработать приложение для преобразования данных
формата Excel к формату Paradox с кодом программы независимым от
структуры Excel-таблиц.
5

2 ВЫБОР МЕТОДА РЕШЕНИЯ


Продумывая структуру разрабатываемого приложения было принято
решение использовать Delphi-компонент BatchMove [3]. Логику решения
задачи в этом случае можно отобразить так:

Рисунок 1 — Логика решения задачи преобразования данных

Здесь исходные данные хранятся в файле Test.xls. Поскольку компонент


BatchMove преобразует только файлы форматов Paradox, dBASE, FoxPro и
ASCII (текстовый файл), то предварительно необходимо преобразовать файл
Test.xls к текстовому формату. Excel позволяет сохранять книги в файлы
только двух форматов: dBASE и ASCII. Работая с файлами формата dBASE,
была обнаружена проблема сохранения кириллической кодировки. Поэтому
единственный формат данных, в котором следует сохранять файл Test.xls —
это ASCII. На рис. 1 этот файл обозначен, как Test.txt. Далее файл Test.txt с
помощью компонента BatchMove преобразуется к формату Paradox — файл
Test.db.
Для достижения поставленной цели необходимо, чтобы код программы
был независим от структуры таблицы Excel. Эту задачу можно решить, если
BatchMove делает преобразование формата Excel к формату Paradox на
основе некоторого внешнего файла описания конечного документа.
К сожалению документации на составление файлов описания не было
найдено. Поэтому пришлось сделать обратное преобразование форматов. То
6

есть, используя BatchMove файл формата Paradox был преобразован к


текстовому формату.
В результате получили файл TestTxt.ch. Его текст:
[TESTTXT]
Filetype=Fixed
CharSet=ascii
Field1=Num,Number,06,00,00
Field2=Text,Char,05,00,06
Рисунок 2 — Код файла описания
После этого аналогичным образом был создан файл описания для трех
полей
[Test]
Filetype=Fixed
Field1=Num,Number,02,00,00
Field2=Text,Char,05,00,02
Field3=Num,Number,01,00,07
CharSet=cyrr
7

ВЫВОДЫ
Данная работа посвящена проблеме манипуляции данными документов
разных форматов. А именно работе с форматами Excel и Paradox в системах
баз данных.
Решение данной проблемы возможно с применением контроллеров
автоматизации MS Office [1]. У данного решения есть недостаток. Дело в том,
что код Delphi-приложения зависит от размера таблицы Excel. Другими
словами, под каждую конкретную таблицу Excel необходимо переписывать
Delphi-приложение.
В данной работе предложено другое решение: использование файла
описания на основании анализа которого Delphi-приложение преобразует
таблицу Excel требуемой Paradox-таблице. Такое решение позволило
разработать программу, код которой не зависим от структуры Excel-таблиц.
8

СПИСОК ЛИТЕРАТУРЫ
1. Codd E. F. Relational completeness of data base sublanguages. - Ibid. 1972,
p. 65—98.
2. Дейт К. Введение в системы баз данных. - М.: Издательский дом
"Вильямс", 2001. - 1072 с.
3. Ульман Дж. Основы систем баз данных /Пер. c англ. М. Р. Когаловского. -
М.: Финансы и статистика, 1983. -334 с.
4. Чекалов А. Базы данных: от проектирования до разработки приложений. -
СПб.: БХВ-Петербург, 2003. – 384 с.
5. Чен П. Модель "сущность-связь" - шаг к единому представлению о данных
//СУБД №3, 1995. – 324 с.
6. Swar B. Delphi 6, ADO, and XML - http://www.pinnaclepublishing.com
7. Вендров А.М. CASE-технологии. Современные методы и средства
проектирования информационных систем - http://www.citforum.ru