Поиск и замена (ReplaceDialog)
Диалог используется для организации поиска фрагмента текста по образцу поиска, заданного свойством FindText, и замены найденного фрагмента, на текст, указанный свойством ReplaceText. Событие OnReplace возникает при нажатии кнопки Заменить или Заменить все. Выбор диска (DriveComboBox) Диалог (панель Win3.1) позволяет выбрать нужный диск, имя которого помещается в свойстве Drive. Выбор каталога (DirectoryListBox) Диалог (панель Win3.1) позволяет выбрать нужный каталог, имя которого помещается в свойстве Directory, а имя диска ‑ в Drive. Для включения возможности перехода на другой диск нужно поместить компонент DriveComboBox и в его свойстве DirList указать имя компонента DirectoryListBox. Вопросы для самопроверки и контроля Вопросы для самопроверки 1. Для чего используется репозиторий (repository)? 2. Каково назначение свойства Name? 3. Каково назначение свойства Caption? 4. Каково назначение свойства Transparent? 5. Каково назначение свойства Visible? 6. Каково назначение свойства AutoSize? 7. Каково назначение свойства Align? Контрольные вопросы 1. Каково назначение свойства Enabled? 2. Каково назначение свойства Tag? 3. Каково назначение свойства Text? 4. Каково назначение события OnClick? 5. Каково назначение события OnChange? 6. Каково назначение события Refresh? 7. Каково назначение компонента ListBox? 8. Каково назначение компонента ComboBox? 9. Каково назначение компонента Button? 10. Каково назначение компонента CheckBox? 11. Каково назначение компонента RadioButton? 12. Каково назначение компонента Memo? Глава 3. Работа с базами данных Основные понятия База данных (БД) ‑ это совокупность взаимосвязанных двумерных таблиц. Система управления БД (СУБД) ‑ это специальный комплекс программ, предназначенных для автоматизации процедур создания, хранения, ведения и иcпользования баз данных. Существуют персональные (FoxPro, Paradox, Access, Dbase) и многопользовательские полнофункциональные, промышленные СУБД (Oracle, InterBase, Microsoft SQL Server, Progrеss, Informix, SyBase).
Имеется несколько архитектур использования баз данных [2; 7]. Локальная ‑ приложение и база находятся на одном компьютере (п. 3.2). Файл‑серверная ‑ база данных находится на другом компьютере, который называется файл‑сервером, и приложение обращается за информацией к файлу‑серверу. Недостатком является перегрузка каналов связи, так как фактически вся база или ее большая часть копируется по каналам на клиентскую машину (п. 3.2). Клиент‑серверная ‑ архитектура аналогичная предыдущей, но запрос выполняется на серверной машине, что разгружает каналы связи (п. 3.14). Распределенная (компонентная) ‑ к серверам баз добавляются серверы приложений, на которых выполняются приложения клиентов. Клиентская машина служит для ввода и отображения результирующей информации. Интернетная ‑ доступ к базе осуществляется из броузера, что максимально разгружает клиентскую машину (тонкий клиент) и дает возможность использовать готовые броузеры и программы. Каждая таблица состоит из строк (записей) и столбцов (полей). Ключом таблицы (первичным ключом) называется поле (простой ключ) или комбинация из группы полей (составной ключ), однозначно определяющая каждую запись в таблице. Индекс (вторичный ключ) аналогичен ключу, но может быть неуникальным. Ключи и индексы используются для сортировки, поиска записей и для связывания таблиц. Для доступа к базе используются технология Borland Database Engine (BDE) фирмы Borland или ActiveX Data Objects (ADO) фирмы Microsoft (п. 3.14). Доступ к базе осуществляется через специальные драйверы. Используя данные технологии, можно не привязывать программу к конкретной СУБД, переходить к другой СУБД, изменяя только настройку BDE или внешние источники ODBC для ADO, а не исходные тексты приложения.
Рекомендуется следующий порядок создания простого приложения, использующего базу данных (если уже база создана средствами СУБД, то шаги 1, 3, 4 пропускаются) : 1. Создается отдельная папка для приложения под именем приложения. В эту папку помещаются все компоненты приложения и сама база. 2. Средствами администратора BDE или ODBC база регистрируется c указанием данных о базе, типе СУБД и имени алиасы (псевдодима) для BDE или внешнего источника данных ODBC для ADO. Рекомендуется вместо алиасы BDE создавать внешний источник данных ODBC средствами администратора ODBC и использовать его при работе с технологиями BDE и ADO (п. 3.14). 3. Вызывается Delphi, затем Database Desktop и устанавливается рабочий каталог на папку с приложением (выбором нужной алиасы). 4. Средствами Database Desktop создаются исходные свободные таблицы базы данных. Рекомендуется не связывать эти таблицы и не заполнять их данными (буквы кириллицы нельзя использовать при вводе данных). Работа с Database Desktop заканчивается. Для существующих баз данных шаги 3 и 4 пропускаются. 5. Создается модуль базы данных (п. 3.3). Компонентам Table и Data Source присваиваются подходящие имена для исходных таблиц латинскими буквами. Свойству таблицы Active присваивается значение True (если есть ошибки, то выведется сообщение). 6. Свойству таблицы Active присваивается значение False, и формируются поля соответствия LookUp (п. 3.6) и вычисляемые поля и процедуры формирования их значений. 7. Для всех полей таблиц в свойстве поля DisplayLabel присваиваются их наименования на русском языке и устанавливается нужный порядок их следования. 8. Создаются базовый и другие запросы (п. 3.7.1). 9. Аналогично таблицам формируются наименования полей. 10. Свойству таблиц и запросов Active присваивается значение True. 11. Модуль базы сохраняется под именем DataModule. При использовании этого модуля в других модулях (формах) этого приложения его нужно подключать командой File/Use Unit. Модуль подключается к другому приложению командой Project/Add to Project. 12. Для таблиц и запросов создаются формы (WindowState=wsMaximized) входных документов для их заполнения и просмотра с подключением модуля базы данных. На формах размещаются компоненты DBNavigator (DataSource, Align=alBottom), DBGrid (DataSource, Align=alClient). Устнавливаются нужные размеры колонок форм.
13. Создается пустая стартовая форма (WindowState=wsMaximized). Командой File/Use Unit подключаются все модули. На форме формируется меню вызова форм входных документов и других модулей. 14. Выполняется приложение и заполняются родительские, а затем дочерние таблицы базы данных. 15. Формируются запросы, диаграммы, отчеты, другие компоненты. 16. Сформированное ранее меню дополняется новыми пунктами. 17. Проверяется приложение, и его разработка завершается. Создание базы данных Для создания таблицы автономной базы имеется приложение Database Desktop, которое вызывается командой Tools/Database Desktop. Оно имеет собственное окно, меню и кнопки (рис. 3.2.1). Рис. 3.2.1. Окно Database Desktop Новая таблица создается построителем таблиц (рис. 3.2.2), который вызывается командой File/New/Table. На запрос тип СУБД выберем Paradox 7. Рис. 3.2.2. Окно построителя таблиц
Рассмотрим основные колонки и поля окна конструктора таблиц. Field Name ‑ идентификаторы полей (не более восьми латинских букв и цифр для совместимости с другими СУБД). Type ‑ тип поля (указывается выбором из контекстного меню): Alpha (A ‑ строка из не более чем 255, символов), Number (N ‑ число с плавающей точкой), Money ($ ‑ аналогичен типу Number, но добавляется денежный знак), Short (S ‑ целое число в диапазоне ‑32768..32767), LongInteger (I целое число в диапазоне-2147483647..2147483647), BCD (# ‑ число в двоично-десятичном формате), Date (D ‑ дата), Time (T ‑ время), Timestamp (@ ‑ дата и время), Memo (M ‑ строка любой длины), Formatted Memo (F ‑ аналогичен Memo, но может содержать форматированный текст), Graphic (G ‑ изображение BMP, PCX, TIF, GIF, EPS), OLE (O ‑ объект OLE), Logical (L ‑ логическое ‑ T, F), Autoincrement (+ ‑ при добавлении записи, автоматически формируется уникальное значение), Binary (B – последовательность байтов любой длины), Bytes (Y ‑ последовательность не более чем 255 байтов).
Size ‑ размер поля в байтах. Key ‑ признак первичного ключевого поля (двойной щелчок по колонке). Tables properties ‑ дополнительные свойства таблицы: Secondary Index (задание вторичных индексов), Validity Checks (ограничения на ввод значений полей), Password Security (определение пароля), Referential Integrity (определение ссылочной целостности между таблицами), Table Language. (задание языка), Table Lookop (задание полей просмотра), Depending Tables (зависимые дочерние таблицы). Required Filed ‑ признак обязательного заполнения поля. Minimum..., Maximum... ‑ начало и конец диапазона допустимых значений. Default value ‑ значение по умолчанию при добавлении пустой записи. Picture,Assist ‑шаблон и построитель шаблона значения поля (рис. 3.2.3). Рис. 3.2.3. Окна построителей шаблона и индекса
Вторичные ключи (индексы) создаются путем выбора из списка свойств таблицы строки Secondary Indexes, и после нажатия кнопки Define выводится окно Define Secondary Index (рис. 3.2.2). Используя кнопки со стрелками или двойными щелчками, перенесем нужное поле или несколько полей, если ключ составной, в список индексов. Имеются переключатели: Unique (уникальный индекс), Case sensitive (учет регистров строковых полей), Descending (сортировка по возрастанию). Кнопкой OK производится выход с указанием имени индекса IndKz. Поле, которое является первичным ключом другой родительской таблицы, называют внешним ключом. Для связи таблиц обычно создают индексы по внешним ключам. После формирования таблицы она сохраняется, если нажать кнопку Save As, под указанным именем; при этом в поле имени файла можно указать как полное имя с каталогами, так и псевдоним базы (Alias). Псевдоним позволяет не привязываться к каталогу, который может меняться. Для примера создадим базу из трех таблиц: Стройки (Stroiki), Заказчики (Zakazhiki) и Подрядчики (Podrjdhiki). В начале создадим каталог Stroitelstvo, в котором будет находиться наша база. Рис. 3.2.4. Окно администратора BDE
Займемся созданием таблиц. Таблица Stroiki (рис.3.2.2) будет иметь поля: Ns (наименование стройки, тип A (50)), Kz, Kp (коды заказчика и подрядчика, S), Ds (дата начала строительства, D), Ss (сметная стоимость, $), Fs (освоенная сумма, $), M (мощность, N), Em (единица мощности, например, количество мест для школ, A(10)). Индексами являются поля: Kz (индекс под именем indKz), Kp (indKp). Первичный ключ – поле Ns (можно его не задавать). Все поля, кроме Fs, M, Em, являются обязательными. Таблицы Zakazhiki/Podrjdhiki будут иметь ключевые поля Kz/Kp (код заказчика/подрядчика, S) и поля Nz/Np (наименование заказчика/подрядчика, A(30)) соответственно.
Для корректировки и просмотра открытой таблицы имеются команды Table/Restructure (кнопка Restructure) и Table/Into Structure. Для переименования таблицы следует сохранить ее под новым именем. Создание перекрестных ссылок (связей) между таблицами производится в следующем порядке. Командой File/Open/Tаble открывается дочерняя таблица Stroilki*, кнопкой Restructure переходим в режим редактирования. В списке Table properties выбираем строку Referential Integrity (целостность ссылок), нажмем кнопку Define и появляется одноименное окно (рис. 3.2.5). Из списка Fields выбираем поле Kz и переносим его (двойным щелчком) в поле Child fields (дочернее). Щелкнем дважды на строке Zakazhiki в списке Table, и его ключевое поле Kz поместится в поле Parent’s key (ключевое поле родительской таблицы). Рис. 3.2.5. Окно установки связей между таблицами
Переключатель Cascade задает режим удаления всех дочерних записей (строек одного заказчика), при удалении родительской записи (заказчика из таблицы заказчиков) и корректировки ключей дочерних записей при изменении родительского ключа (кода заказчика из таблицы заказчиков). Кнопкой OK сохраним связь под именем LinkKz. Аналогично установим связь LinkKp по коду подрядчика между дочерней таблицей строек и родительской таблицей подрядчиков. Form2.Query1.Active:=False;{закрытие запроса} End; Внимание! 1. Наличие связей между таблицами может вызвать неудобство при редактировании дочерней таблицы (в форме будут только записи с текущим значением поля связи родительской таблицы) и в полях соответствия не будет списка всех значений поля соответствия (п. 3.6). Поэтому рекомендуется дополнительно описать дочерние таблицы без указания связей и на них ссылаться при формировании формы либо вообще не связывать таблицы (связать их можно в запросе). 2. В именах таблиц не используйте буквы «ч» и «ё». Для заполнения и редактирования таблицы, после ее связывания с другими таблицами, используется кнопка EditData и меню Record приложения Database Desktop (кириллицу при вводе использовать нельзя). Создание модуля данных Модуль данных содержит объекты, связанные с базой, и используется для централизованного управления этими объектами. Его создание производится командой File/New/Data Module (рис. 3.3.1). Имя созданного модуля данных лучше сохранить для наглядности под новым именем, например: DataModulStroiki. Разместим компонент Table с панели Data Access на странице Components (рис. 3.3.1) и выделим его. Зададим свойства: DataBaseName =Stroiki (псевдоним базы), TableName =Stroiki (имя таблицы), Name =Stroiki (имя компонента приравняем имени таблицы для наглядности), Active =True (чтобы можно было обращаться к таблице из программы). Аналогично сделаем для двух оставшихся таблиц. Далее разместим компонент Data Source (источник данных) и выделим его. Зададим свойства: DataSet =Stroiki (имя таблицы) (п.3.4.2), Name =Sourcestroiki (имя компонента). Рис. 3.3.1. Окно модуля данных
То же проделаем и c другими таблицами. Получим модуль (рис.3.3.1). Источник данных служит посредником между таблицей базы и экранными формами, что позволяет переходить на другие СУБД, меняя только настройку компонента ‑ источника данных, а не программы. После открытия проекта нужно вызвать этот модуль командой View/Units/Unit2. Поля в таблице можно использовать как динамические (dynamic) либо как постоянные (persistent). Динамические поля должны быть в таблице, и их можно редактировать. Постоянные поля (виртуальные или псевдополя) могут отсутствовать в таблице, и их значения вычисляются. К имени постоянного поля автоматически добавляется имя компонента Table. Для примера все поля таблицы строек сделаем постоянными и добавим псевдополе Os (Os=Ss‑Fs). Для этого щелкнем правой кнопкой мыши на таблице Stroiki в окне модуля данных и выберем команду Field Editor (редактор полей), появится пустое окнo DataModule2.Stroiki. Из контекстного меню этого окна выберем команду Add all fields (добавить все поля). Командой New Field вызовем окно для формирования вычисляемого (Calculated) псевдополя Os типа Сurrency. Составим процедуру обработки события OnCalcFields (п. 3.4.1) таблицы Stroiki для вычисления значения (свойство Value) псевдополя Os: Procedure TDataModule2.StroikiCalcFields(DataSet: TDataSet); Begin StroikiOs.Value:=StroikiSs.Value‑StroikiFs.Value; End; При ссылках на объекты модуля данных объект уточняется именем модуля DataModule2 (DataModule2.SourceStroiki). Рекомендуется для всех полей задавать словесные наименования полей в их свойствах DisplayLabel через редактор полей, которые выводятся в формах и компонентах вместо латинских имен полей. Рекомендуется модуль базы данных создавать под содержательным именем в папке с базой, включать его в новый проект командой Project/Add to project и подключать его к головному или другому модулю командой File/Use Unit.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|