Обработка файлов в базе данных через Delphi


В Delphi имеется три уровня доступа и обработки файлов:
• использование стандартных средств;
• использование языка SQL;
• программируемый доступ к базе данных: использование языка Object Pascal для написания программ обработки данных.

Первый уровень наиболее легкий в реализации, но с наименьшими возможностями, второй – позволяет к возможностям Delphi добавить средства SQL, что особенно удобно при выполнении задач поискового характера, использование Object Pascal дает возможность реализовать алгоритмы любой сложности, используя в качестве исходных данные из базы. Кроме того, среди стандартных средств можно отдельно выделить мастера (Wizard), с помощью которого представление данных из баз данных на экране предельно просто. Для запуска мастера необходимо выбрать в меню Delphi пункт Database и подпункт Form Wizard. Далее следуют подробные подсказки по составлению форм. В случае необходимости это средство каждый студент может освоить самостоятельно.

Представление данных в виде таблиц

Поставим перед собой задачу: построить приложение для просмотра одного файла (DAT1) в виде таблицы и формы. Для этого откроем новое приложение и перенесем на главную форму:
• из палитры Data Access Table и DataSource;
• из палитры Data Control DBGrid.

Table и DataSource являются невизуальными т.е. во время работы приложения они не будут показаны на экране, поэтому их местоположение не имеет значения, обычно их располагают рядом с той таблицей, к которой они относятся. DBGrid визуальная компонента.

Необходимые свойства Table (обращаем внимание на то, что в дан-ном случае свойствам необходимо присваивать значения именно в такой последовательности):
1. DataBaseName – задается путь до того директория, где размещен файл;
2. TableName – имя файла, если предыдущему свойству присвоено пра-вильное значение, то можно это имя выбрать из выпадающего списка, одновременно можно таким образом проверить, правильно ли задан путь (появится нужный список файлов или нет);
3. Active – дать значение True.

Необходимые свойство DataSource:
DataSet, значение Table1, что является именем по умолчанию объекта Table, можно его выбрать из списка.

Необходимое свойство DBGrid – DataSet; значение DataSource1 (имя по умолчанию объекта DataSource, можно выбрать из списка.

После всех этих операций в таблице должны появиться данные из вы-бранного файла, на DBGrid имеются полосы скроллинга, позволяющие просматривать весь файл. В качестве имен полей используются внутренние имена полей файла. Такой способ задания полей при просмотре файла называется динамическим, при изменении структуры файла эти изменения автоматически будут отражены на экране просмотра. Обращаем внимание на свойство IndexName объекта Table. По умолчанию оно не определено. Если обрабатываемый файл имеет вторичные индексы (созданные в Database Desktop), то имя любого из них можно выбрать из выпадающего списка и задать в качестве значения IndexName. Результат: если имя индекса не задано, то данные в таблице упорядочены по возрастанию ключей, если задано имя индекса – то по возрастанию значений в поле индекса. Вывод: вторичные индексы позволяют представить одни и те же данные упорядоченными по разным критериям. Обращаем внимание на то, что когда файл связан с таблицей на экране (свойство Active имеет значение True), то никакие изменения не будут иметь значения. Для изменения имени индекса надо сначала менять значение на False, произвести необходимые изменения, а затем восстановить значение True.

Обратим внимание на некоторые свойства TTable, которые часто упрощают решение задач.

IndexName – если значение этого свойства не задано, то записи файла показаны в порядке возрастания первичного ключа. Если задать имя вторичного индекса, то записи файла будут показаны по возрастанию этого индекса.

Filter – может содержать условное выражение на полях файла. При наличии фильтра будут показаны лишь удовлетворяющие заданному условию записи.

Filtered – может иметь значения True или False. В зависимости от этого заданный фильтр учитывается или нет.

Кроме упомянутых выше динамических полей можно задавать и статические поля в имеющихся на экране таблицах. Для статических полей можно выбрать более содержательные названия (в том числе и на русском языке) по сравнению с внутренними именами в файле, можно влиять на их внешний вид, можно ввести новые поля, вычисляемые на основе заданных. Недостатком статических полей является то обстоятельство, что при внесении изменений в названия полей в файле они автоматически не будут отражены на экране. Этот недостаток не столь уж и существенный, потому что структуру файлов меняют относительно редко, а если приложение сдано в постоянную эксплуатацию, то пользователи не имеют возможности этого делать. Поэтому использование статических полей желательно для повышения удобства работы с приложением. В одной таблице не может одновременно быть статических и динамических полей. Для создания статических полей надо делать двойной щелчок на иконке объекта Table, откроется пока пустое окно с названием ИМЯ_ФОРМЫ.ИМЯ_ТАБЛИЦЫ статических полей (по умолчанию все поля динамические). При нажатии на этом окне правой клавиши мыши откроется меню для создания и изменения статических полей. Рекомендуем читателю поэкспериментировать и самостоятельно освоить работу со статическими полями.

До сих пор рассматривали создание на экране одной таблицы для представления данных из одного файла базы данных. Переходим к представлению данных из двух связанных файлов в двух таблицах. Если связь между файлами была установлена уже на стадии проектирования базы данных, то для представления этих связанных таблиц на экране необходимо только повторить два раза все описанное выше: создать все объекты два раза и связывать с двумя разными (связанными) файлами. Результат: когда указатель фиксирован на записи ведущего файла, то скроллинг ведомого файла возможен только по записям, связанным с ней. Естественно, что при связи 1:1 скроллинг ведомой таблицы отсутствует полностью.

Связь между двумя файлами может быть создана и во время разработки приложения (при условии, что она не была создана ранее). Рассмотрим это на примере таблиц 1 и 2 из п. 5.2. В разных приложениях могут быть установлены разные связи между файлами и, таким образом, достигается большая гибкость.

Обратим внимание на следующие существенные моменты:
• поля НОМЕР СПЕЦИАЛЬНОСТИ в первом и СПЕЦИАЛЬНОСТЬ во втором файле должны иметь один и тот же тип данных, в нашем случае выбран Short;
• во втором файле должен быть вторичный индекс по полю СПЕЦИАЛЬНОСТЬ, потому что оно будет участвовать в соединении. В первом файле соответствующее поле ключевое.

Для представления на экране двух связанных файлов необходимо перенести на экран с палитры компонент всё необходимое (Table, DataSource, DBGrid) два раза и связать с файлами, как описано выше в этом параграфе. Для обеспечения связи между таблицами сделаем следующее:
• Активизируем соответствующий нижней таблице объект Table.
• Изменим значение свойства Active на False.
• Выберем из выпадающего списка значение для свойства MasterSource, в данном случае предлагается только одно значение.
• Активизируем диалоговое окно свойства MasterFields: Field Link Designer. В верхней строке можно выбрать индекс, по которому будет выполняться соединение. По умолчанию предлагается объ-единить по ключевому полю. Выберем из выпадающего списка имя вторичного индекса, соответствующего полю СПЕЦИАЛЬНОСТЬ (SPEC_IND). Дальнейшие шаги очевидны: надо из двух колонок, соответствующих двум таблицам, выбрать нужные поля и подтвердить свой выбор.
• Изменим значение свойства Active на True.

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


Рис. 1. Связанные таблицы

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

Представление данных в виде форм

В таблице можно одновременно представлять несколько записей, каждая из которых занимает одну строку. Это обеспечивает хороший обзор данных, однако сильно ограничивает возможности представления данных в удобном для пользователя виде. Вспомним, что единственным средством улучшения внешнего вида таблицы являются статические поля. Имеется другое стандартное средство представления данных – форма. На форме одновременно имеется одна запись файла, но зато она может быть снабжена подробным пояснительным текстом. Рассмотрим создание формы на базе файла COUNTRY.db, который входит в качестве примера в комплект поставки Delphi. Для создания формы откроем новое приложение (естественно, можно создать новую форму в существующем MDI– или SDI–приложении). На форму перенесем из палитр знакомые нам объекты Table DataSource. Свойствам упомянутых объектов дадим точно такие же значения, как в предыдущем случае. Для доступа к файлу COUNTRY.db свойству DateВaseName выберем из выпадающего списка значение DBDEMOS. Пояснительный текст на форму можно занести с помощью объектов Label из палитры Standard.

Для представления на форме полей из базы данных используем объект DBEdit из палитры Data Controls. Обращаем внимание на то, что объекты Edit (палитра Standard) DBEdit не взаимозаменяемы, у них разные свойства. Размещаем пояснительный текст и объекты DBEdit на экране в наиболее удобном для будущего пользователя виде. Если форма на экране компьютера должна заменить бланк на бумаге, то целесообразно сохранить привычный для пользователей внешний вид. Свойству DataSource объекта DBEdit дадим традиционное значение. Свойству DataField выбираем из выпадающего списка в качестве значения имя того поля базы данных, которое должно быть представлено. Поля редактирования могут быть предназначены только для чтения (без права изменения данных) или для редактирования.

В отличие от представления данных таблицей, где автоматически вставлены полосы скроллинга для перемещения по файлу, теперь нам предстоит самим позаботиться об этом. Этой цели служит навигатор DBNavigator (палитра Data Controls). DBNavigator – визуальный объект, поэтому для него необходимо выбрать удобное место на экране. Для его связывания с источником данных служит свойство DataSource. По умолчанию он содержит максимально возможный перечень кнопок. Если не все они в данном случае нужны, то их количество может быть уменьшено с помощью свойства VisibleButtons. Слева от имени этого свойства стоит знак + : вспомните, что это означает? Внешний вид полученной формы представлен на рис. 2. В DBNavigator оставлено 4 клавиши для передвижения к первой, предыдущей, следующей или последней записи.

На одной форме могут быть представлены и поля разных файлов. Если эти файлы не связаны между собой, то на одном экране находятся две формы, совершенно не связанные между собой, каждая со всеми компонентами, действующими независимо друг от друга. Формами можно пред-ставить и связанные файлы. Связь устанавливается такими же способами, как при представлении базы данных таблицами.


Рис. 2. Представление данных в виде формы

Если между файлами имеется связь 1:N, то навигатор первой формы позволяет передвигаться по всему файлу, а навигатор второй формы – только по записям, соответствующим текущей записи в первом файле.

Совместное использование таблицы и формы

Одновременно на экране могут быть размещены таблица и форма. Случай, когда они соответствуют двум разным, между собой не связанным файлам, сводится к описанным выше. Поэтому предположим, что между файлами имеется связь 1:N (ведущий – ведомый). Тогда целесообразно представить данные из ведущего файла в виде формы, а данные из ведомого файла – в виде таблицы.

Представим в таком виде данные из табл. 1 и 2 (п. 5.2). Результат по-казан на рис. 3.


Рис. 3. Представление данных в виде формы и таблицы

Очевидно, что ведущей в данном случае является таблица 1, потому что по каждой специальности учатся много студентов, а каждый студент учится по одной специальности. Приведенный пример работает следующим образом. Навигатор формы позволяет нам передвигаться по всем записям первого (ведущего) файла; полоса скроллинга таблицы – только по тем записям второго файла, которые соответствуют показанной на форме записи. В нашем случае по студентам одной специальности. При передвижении к следующей записи в файле специальностей автоматически меняется и содержимое таблицы.

Рассмотрим реализацию. Создание файлов мы подробно рассмотрели раньше. Обратим лишь внимание на следующие существенные моменты:
• поля СПЕЦИАЛЬНОСТЬ в первом и СПЕЦИАЛЬНОСТЬ во втором файле должны иметь один и тот же тип данных, в нашем случае выбран Short;
• во втором файле должен быть вторичный индекс по полю СПЕЦИАЛЬНОСТЬ, потому что оно будет участвовать в соединении. В первом файле соответствующее поле ключевое.

Реализация приложения не составляет труда. В верхней части создадим форму, в нижней – таблицу. Для улучшения внешнего вида создадим в таблице статические поля. Для обеспечения связи между формой и таблицей сделаем следующее:
• Активизируем соответствующий таблице объект Table.
• Выберем из выпадающего списка значение для свойства MasterSource, в данном случае предлагается только одно значение.
• Активизируем диалоговое окно свойства MasterFields: Field Link Designer. В верхней строке можно выбрать индекс, по которому будет выполняться соединение. По умолчанию предлагают объединить по ключевому полю. Выберем из выпадающего списка имя вторичного индекса, соответствующего полю СПЕЦИАЛЬНОСТЬ (SPEC_IND). Дальнейшие шаги очевидны: надо из двух колонок, соответствующих двум таблицам, выбрать нужные поля и подтвердить свой выбор.

Результат соединения проявляется только после запуска приложения. В принципе Delphi не считает ошибкой, если поменять местами ведущий и ведомый файлы при соединении, т.е. при отношении 1:N ведущим считать второй файл. Результат: при фиксации одной записи второго файла будет показана одна запись первого, передвижение по записям первого файла невозможно. В любой момент времени в таком случае на экране имеются по одной записи из каждого файла.


Комментарии запрещены.




Статистика