Adotable delphi описание компонента

Технология ADO в Delphi

Компоненты для работы с Microsoft ActiveX Data Objects (ADO) впервые появились в среде Delphi версии 5.

ADO — это технология стандартного обращения к реляционным структурам данных от Microsoft. Она аналогична BDE по назначению и сродни ему по возможностям.

Хочешь получить полноценный видеокурс по Delphi прямо сейчас? Кликни на картинку и оформи заказ:

ЗАКАЗАТЬ

В основе архитектуры ADO лежит объектная модель компонентов COM (Component Object Model). Все объекты и интерфейсы ADO представляют собой интерфейсы и объекты СОМ.

Модель СОМ является базовой для технологий ActiveX и OLE. Проиллюстрировать это отношение можно на примере объекта TObject, как базового объекта для VC L Delphi.

Технология СОМ работаете так называемыми СОМ-обьектами. Во многом СОМ-объекты похожи на обычные объекты визуальной библиотеки компонентов Delphi.

Но, в отличие от последних, СОМ-объекты не содержат поля, в них находятся лишь свойства и методы, а также интерфейсы.

Интерфейсы — это группы логически или семантически связанных процедур, которые обеспечивают связь между поставщиком услуги (сервером) и его клиентом. Названия интерфейсов начинаются с буквы I.

Обычный СОМ-объект включает в себя один или несколько интерфейсов. Кроме того, СОМ-объект содержит методы, которые позволяют приложению пользоваться им.

Технология СОМ имеет два явных плюса:

  • создание СОМ-объектов не зависит от языка программирования. Таким образом, СОМ-объекты могут быть написаны на различных языках;
  • СОМ-объекты пригодны для использования в любой среде программирования под Windows. В число этих сред входятDelphi, Visual С++, С++ Builder, Visual Basic и многие другие.

Технология СОМ реализуется с помощью СОМ-библиотек (такие файлы операционной системы, как OLE32.DLL и OLEAUT32.DLL). СОМ-библиотеки содержат набор стандартных интерфейсов, которые отвечают за функциональность СОМ-объекта, а также небольшой набор функций API, обеспечивающих создание СОМ-объектов и управление ими.

В Delphi воплощение и поддержка технологии СОМ называется Delphi ActiveX framework, DAX. Реализация DAX описана в модуле AxCtrls.

Рассмотрим особенности архитектуры ADO (рис. 12.1).

Рис. 12.1. Архитектура ADO

Перечислим основные интерфейсы ADO и кратко поясним их назначение:

  • интерфейс IConnection выполняет следующие функции:
  • осуществляет связь с сервером;
  • управляет транзакциями;
  • получает информацию о произошедших ошибках (свойство Errors);
  • получает информацию о схеме данных (таблицы, поля и т. д.);
  • интерфейс IRecordset (на нижнем уровне ADO это IRowset) является аналогом TDataSet в Delphi и поддерживает текущее положение и перемещение курсора, закладки (Bookmarks), чтение, изменение и удаление записей и т. п.;
  • интерфейс IReld позволяет получать значение поля, его тип, длину и другие сведения о поле данных;
  • интерфейсы ICommand и IParameter обеспечивают работу с командами источника данных. Синтаксис команд для каждого из источников свой собственный;
  • интерфейс IProperty позволяет получать и устанавливать параметры, специфические для провайдера данных.
  • Для работы с механизмом ADO в Delphi 7 предназначены семь стандартных компонентов, расположенных на закладке ADO палитры компонентов (рис. 12.2).

    Рис. 12.2. Закладка ADO

    Первый компонент называется ADOConnection. Функционально он аналогичен компоненту Database закладки BDE. С помощью компонента ADOConnection можно указывать местоположение базы данных и работать с транзакциями. Рассмотрим основные свойства компонента ADOConnection, отображаемые в окне инспектора объектов (табл. 12.1).

    Следующий компонент закладки ADO называется ADOCommand. Он предназначен для выполнения SQL-команды без возврата результирующего набора данных. Основные свойства этого компонента представлены в табл. 12.2.

    Таблица 12.2. Основные свойства компонента ADOCommand

    Третий компонент закладки ADO носит имя ADODataSet Его назначение — получение набора данных из одной или нескольких таблиц базы данных. Кроме того, он также позволяет работать с возвращенным набором данных визуальным компонентам, предназначенным для отображения данных. Это наиболее общий компонент для работы с набором данных, который может использоваться вместо компонентов ADOTable, ADOQuery или ADOStoredProc. В таблице 12.3 приведены основные свойства указанного компонента.

    Таблица 12.3. Основные свойства компонента ADODataSet

    Следующий компонент закладки ADO называется ADOTable. Он является аналогом компонента Table, расположенного на закладке BDE, и предназначен для доступа к таблице с помощью механизма ADO. Компонент ADOTable имеет свойства, которые мы уже рассматривали ранее в компонентах Table и ADODataSet, поэтому мы не будем возвращаться к ним еще раз.

    Компонент ADOQuery представляет собой запрос к базе данных. Это может быть как запрос, в результате которого возвращаются данные из базы (например, SELECT), так и запрос, не формирующий результирующего набора данных (например, INSERT). Компонент аналогичен компоненту Query из BDE. Все основные его свойства мы уже рассматривали в описании свойств компонентов Query н ADODataSet

    Компонент ADOStoredProc предназначен для вызова процедуры, хранимой на сервере базы данных. В отличие от BDE и InterBase хранимые процедуры в ADO могут возвращать набор данных, поэтому компонент такого типа является потомком DataSet и может выступать источником данных в компонентах типа DataSource.

    Последний компонент закладки ADO называется RDSConnection. Этот компонент управляет маршалингом данных, когда набор записей переносится из одного компьютера на другой.

    • OnWillConnect — вызывается перед установкой соединения;
    • OnConnectComplete — вызывается после установки соединения;
    • OnDisconnect — активируется при разрыве соединения. Эти события инкапсулированы в компоненте ADOConnection.События транзакции:
    • OnBeginTransComplete — происходят при выполнении BeginTrans;
    • OnCommitTransComplete — происходят при выполнении CommitTrans;
    • OnRollbackTransComplete — вызываются при выполнении RollbackTrans.

    События данной группы инкапсулированы в компоненте ADOConnection. События выполнения команд OnWillExecute и OnExecuteComplete вызываются перед выполнением команды и после него соответственно.

    • События выборки данных.
    • OnFetchProgress — многократно вызывается в процессе выборки данных;
    • OnFetchComplete — завершение выборки.
  • Уведомления об изменении положения текущей записи в наборе:
    • OnWillMove — вызывается до изменения положения текущей записи. Позволяет отменить действие;
    • OnMoveComplete — вызывается после изменения положения текущей записи;
    • OnEndOfRecordset — генерируется при достижении конца набора данных. Позволяет добавить новую запись.
    • Уведомления об изменении набора данных.
      • OnWillChangeField, OnFieldChangeComplete — вызываются до и после изменения текущей записи набора;
      • OnWillChangeRecord, OnRecordChangeComplete — вызываются до и после изменения, добавления, удаления строки набора и при отмене этих действий;
      • OnWillChangeRecordset, OnRecordsetChangeComplete — вызываются до и после открытия, закрытия, повторного запроса и синхронизации набора данных.
        • установка соединения с сервером (Connection);
        • выполнение команды (Execute);
        • выборка данных (Fetch).

        • вызывается обработчик события OnWillConnect;
        • управление передается программе.
        • вызовется обработчик события OnWillExecute;
        • управление передастся программе.
        • ADOTable закладки ADO;
        • DataSource закладки Data Access;
        • DBGrid закладки Data Controls.

        Рис 12.4. Окно выбора файлов связи с данными

        Этот файл входит в дистрибутив Delphi и указывает на базу данных формата Microsoft Access, которая также поставляется вместе с Delphi. Нажмем кнопку Открыть, и в поле Use Data Link File появится строка C:Program FilesCommon FilesSYSTEMole dbData LinksDBDEMOS.udl.

        Нажимаем OK — база данных выбрана. Теперь осталось определить таблицубазы данных. Для этого в свойстве TableName компонента ADOTablel указываем, например, таблицу COUNTRY. Наконец, мы можем активировать набор данных — присвоим свойству Active компонента ADOTablel значение true. Все, приложение готово, и его можно запускать.

        Читайте также:  May be used uninitialized in this function

        Рассмотрим сначала особенности компонентов наборов данных ADO на примере ADOTable. Этот компонент может использоваться в приложениях вместо компонента Table, выполняющего аналогичные функции. Он вступает в контакт с указанной таблицей базы данных. База данных задается свойствами ConnectionString или Connection. Для управления таблицей в приложение вводится, помимо компонента ADOTable, обычный компонент источника данных DataSource, в свойстве DataSet которого задается имя компонента ADOTable. Далее к этому источнику данных DataSource подключаются любые компоненты отображения данных.

        Имя таблицы, как и в компоненте Table, задается свойством TableName. Однако, не все провайдеры поддерживают непосредственный доступ к таблице по ее имени. Они могут требовать доступ с помощью оператора SQL SELECT. Какой именно вариант доступа: прямой или через оператор SELECT будет использоваться, определяется свойством TableDirect. По умолчанию TableDirect = false, что означает автоматическое создание компонентом ADOTable соответствующего оператора SELECT.

        Соединение с базой данных осуществляется так же, как и в компонентах BDE, методом Open или установкой в true свойства Active. Но при этом, если связь с базой данных осуществляется через компонент ADOConnection, надо учитывать описанную выше взаимосвязь свойства Active компонента ADOTable и свойства Connected компонента ADOConnection.

        В компоненте ADOTable имеются два свойства, характеризующие курсор, используемый при навигации по таблице. Одно из них – CursorLocation описано выше. Другое – CursorType описывает иные характеристики курсора. Это свойство может иметь значения:

        · ctUnspecified – тип курсора не определен;

        · ctOpenForwardOnly – курсор может перемещаться по таблице только вперед. Этот тип курсора повышает производительность приложения;

        · ctKeyset – при этом типе курсора записи, добавленные другими пользователями, невидимы, а записи, удаленные другими пользователями, недоступны. Этот тип используется по умолчанию;

        · ctDynamic – этот тип динамического курсора обеспечивает видимость всех изменений, сделанных другими пользователями: модификаций, удалений, вставок. Курсор может перемещаться по таблице вперед и назад;

        · ctStatic – этот тип статического курсора обеспечивает копирование записей. Изменения данных, сделанные другими пользователями, невидимы.

        Свойство MarshalOptions определяет, какие именно записи возвращаются на сервер, если при работе используется клиентский курсор. При значении MarshalOptions = moMarshalAll (значение по умолчанию) на сервер возвращаются все записи, считанные в локальный набор записей клиента. При значении MarshalOptions = moMarshalModifiedOnly на сервер возвращаются только измененные записи.

        Свойство CacheSize указывает, сколько записей заносится в локальный буфер оперативной памяти. По умолчанию CacheSize = 1. Если задать, например, CacheSize = 10, то при открытии базы данных в буфер загрузятся первые 10 записей. Пока будет идти работа с этими записями, все операции будут проводиться в оперативной памяти без обращения к базе данных. Если указатель таблицы вышел за пределы 10, то в память загрузятся следующие 10 записей и т.д. Естественно, что буферизация записей повышает эффективность работы.

        Основные способы работы с ADOTable не отличаются от способов для Table. Точно так же двойной щелчок на компоненте вызывает Редактор Полей, в котором можно задать свойства отдельных полей, ничем не отличающиеся от полей компонентов BDE. Впрочем, одно печальное отличие есть: в компонентах ADO невозможно работать со словарями данных, так что в каждом компоненте свойства поля приходится задавать вручную. Словарь данных представляет собой совокупность определений БД и атрибутов. Кроме того, надо иметь в виду, что не все драйверы ADO могут работать с любыми типами полей.

        Программный доступ к полям осуществляется так же, как в компоненте Table: по индексу через свойство Fields[i:integer], по имени поля с помощью метода FieldByName(‘ ‘), по имени объекта поля.

        Связь друг с другом компонентов ADOTable, работающих с разными таблицами, одна из которых главная, а другая – вспомогательная, осуществляется так же, как в компонентах Table, с помощью свойств MasterSource и MasterFields.

        Упорядочение отображаемых записей производится установкой свойства IndexFieldNames. В этом свойстве можно задавать любое сочетание имен полей, по которым вы хотите упорядочить отображение, разделяя их точками с запятой. В отличие от свойства IndexFieldNames компонентов BDE, в компонентах ADO можно задавать любые сочетания полей, независимо от того, была ли индексирована таблица при ее создании по этим полям. В этом проявляется дополните­льная гибкость компонентов ADO. Но зато в этих компонентах не работает свойство IndexName (хотя оно присутствует в Инспекторе Объектов), позволяющее использовать индексы, сформированные при создании таблицы.

        Фильтрация отображаемых данных может осуществляться так же, как в компонентах BDE, с помощью свойства Filter, в котором записываются условия отбора. Отличие от компонентов BDE заключается в том, что в компонентах ADO в строке Filter имена полей обязательно должны отделяться пробелами от операций отношения. Также пробелами должны окружаться логические операции and и оr. Например, если в компонентах BDE фильтр может быть записан в виде:

        то в компонентах ADO эта строка должна иметь вид:

        Свойство Filter работает, если свойство Filtered = true.

        Методы, используемые при программировании работы с базой данных, в ADOTable в основном те же, что в Table. Навигация по таблице осуществляется методами First, Next, Last и Prior. При редактировании данных используются также методы, используемые для Table: Insert, Edit, Post и другие. Из методов поиска в ADO реализованы только методы Locate и Lookup.

        Из методов, отсутствующих в компонентах BDE, интересными представляются методы сохранения набора данных в файле и чтения его из файла. Сохранение в файле осуществляется методом SaveToFile:

        procedure SaveToFile(const FileName: String=’ ‘;

        Format: TPersistFormat = pfADTG);

        Параметр FileName указывает имя файла, в котором сохраняется набор данных. Необязательный параметр Format определяет формат файла. Этот параметр может принимать одно из двух значений: pfADTG – формат ADTG (Advanced Data Tablegram), или pfXML – формат XML. По умолчанию принято значение pfADTG. Так что если оно устраивает, то сохранение набора данных в файле может осуществляться, например, таким оператором:

        Чтение данных из файла осуществляется процедурой LoadFromFile:

        procedure LoadFromFile (const FileName: WideString);

        где FileName – имя файла. Загружать файл в набор данных можно даже при закрытом соединении с базой данных. В момент загрузки соединение автоматически откроется.

        Методы SaveToFile и LoadFromFile удобно использовать для получения мгновенного портрета данных на какой-то момент времени. Это может требоваться, например для того, чтобы можно было восстановить запомненное, а затем из-за каких-то ошибок испорченное состояние базы данных.

        Теперь коротко рассмотрим компонент ADOQuery, который является аналогом компонента Query, используемого при работе с BDE. Этот компонент используется для выполнения произвольных запросов SQL. Его основное свойство SQL, содержащее запрос и методы выполнения этого запроса, ничем не отличаются от компонента Query. А соединение с базой данных, свойства и методы фильтрации и поиска аналогичны рассмотренным выше для компонента ADOTable.

        Отличие от компонента Query заключается в методике работы с параметрами при динамических запросах. Если в запросе SQL указаны параметры, то в компоненте Query объекты, соответствующие этим параметрам, расположены в свойстве Params типа TParams. Это массив параметров, причем доступ к значениям отдельных параметров во время выполнения может осуществляться или по индексу, или по имени с помощью метода ParamByName. Например, возможны следующие операторы:

        Читайте также:  Как ассимилировать в endless legend

        // значение параметра типа string

        Query1. Params [0].AsString:=Edit1.Text;

        // значение параметра типа integer

        В компоненте ADOQuery объекты, соответствующие параметрам, указанным в свойстве SQL, расположены в свойстве Parameters типа TParameters. Это тоже массив параметров, но его свойства и методы отличаются от свойств и методов TParams. Доступ к отдельным параметрам во время выполнения может осуществляться по индексу, но при этом значение определяется только функцией Value, a методы AsString, AsInteger и т.п. отсутствуют. Доступ к отдельным параметрам может осуществляться по имени с помощью метода ParamByName, который является методом не самого компонента ADOQuery (как в Query), а его свойства Parameters. При этом значение параметра определяется методом Value. Наконец, доступ к параметрам может осуществляться методами FindParam, GetParamList, ParamValues свойства Parameters, которые не отличаются от аналогичных методов свойства Params в Query. Например, возможны следующие операторы:

        // значение параметра типа string

        // значение параметра типа integer

        Еще одно отличие параметров в компонентах ADOQuery и Query заключается в том, что во время проектирования компонент Query содержит только те параметры, которые указаны в запросе SQL. А в ADOQuery предусмотрена возможность вводить параметры во время проектирования. Для этого надо нажать кнопку с многоточием около свойства Parameters в окне Инспектора Объектов, затем в появившемся окне редактора параметров щелкнуть правой кнопкой мыши и выбрать в контекстном меню раздел Add.

        Компонент ADOStoredProc является аналогом компонента StoredProc, используемого при работе с BDE. Этот компонент используется для выполнения хранимых на сервере процедур. В целом он работает так же, как его аналог StoredProc.

        Свойство, в котором задается имя выполняемой процедуры, называется РrосеdureName, а не StoredProcName, как в StoredProc. После того как вы зададите имя процедуры, в свойстве Parameters, аналогичном рассмотренному выше для компонента ADOQuery, появятся входные параметры процедуры. Выходные параметры представляются объектами полей компонента ADOStoredProc. Вы можете увидеть их и изменить их свойства, если сделаете двойной щелчок на компоненте ADOStoredProc, в появившемся окне Редактора Полей сделаете щелчок правой кнопкой мыши и выберете раздел Add all fields. В окне появятся поля, соответствующие всем выходным параметрам процедуры.

        Таким образом, при работе с хранимыми процедурами вы сначала должны задать значения входных параметров, затем выполнить вызов процедуры оператором вида:

        а к возвращенным параметрам обращаться как к объектам полей компонента ADOStoredProc.

        Универсальный компонент ADODataSet может выполнять функции компонентов ADOTable, ADOQuery, ADOStoredProc.

        Режим работы ADODataSet задается двумя взаимосвязанными параметрами: CommandType и CommandText.

        Параметр CommandType может принимать значения:

        · cmdUnknown – неизвестный тип команды в свойстве CommandText;

        · cmdText – в свойстве CommandText указан текст команды SQL или вызов хранимой процедуры;

        · cmdTable – в свойстве CommandText указано имя таблицы;

        · cmdStoredProc – в свойстве CommandText указано имя хранимой процедуры;

        · cmdFile – в свойстве CommandText указано имя файла, в котором сохранен набор данных;

        · cmdTableDirect – в свойстве CommandText указано имя таблицы. Возвращаются все поля таблицы.

        Таким образом, при значениях cmdTable или cmdTableDirect компонент работает как ADOTable, при значении cmdText – как ADOQuery (только при запросе SELECT), при значении cmdStoredProc – как ADOStoredProc. При значении cmdFile компонент работает как ADOTable, беря значения данных из файла, в котором они были ранее сохранены методом SaveToFile. Значение cmdUnknown может использоваться только как временное. Перед соединением с базой данных это значение должно быть изменено.

        Следует подчеркнуть, что в режиме cmdText компонент может выполнять только оператор SELECT. Для выполнения операторов языка манипулирования данными, такими как DELETE, INSERT или UPDATE, надо использовать компонент ADOQuery или описанный далее компонент ADOCommand.

        Компонент TADOCommand инкапсулирует командный объект ADO. Он предназначен для выполнения любых команд, но наиболее часто используется для команд, которые не возвращают данные, например, для создания и реорганизации наборов данных. Другие команды обычно выполняются компонентами TADODataSet, TADOQuery, TADOStoredProc, которые более удобны.

        Основными свойствами TADOCommand, помимо обычных для компонентов ADO ConnectionString и Connection, являются свойства CommandType и СоmmandText. Впрочем, для TADOCommand чаще всего используется значение CommandType = cmdText, а в свойстве CommandText пишется выполняемая команда.

        Выполнение команды осуществляется методом Execute. Если команда такова, что метод Execute возвращает набор данных, для их использования должен применяться один из компонентов набора данных. Передавать в него возвращенный набор данных можно непосредственно операцией присваивания. Например:

        Вид урока: практическое занятие

        Метод обучения: частично-поисковый

        Цели урока:

        • Обучающие:
        • изучить свойства компонентов TADOConnection, TADODataSource, TADODataSet, TADOTable, TADOQuery.
        • научить использовать ADO-компоненты Delphi и их свойства для создания приложений.
      • Развивающие:
        • продолжить развитие логического мышление студентов;
        • показать вариативность использования разных свойств объектов для выполнения одних и тех же задач;
        • продолжить формирование у студентов навыков по разработке интерфейса программы;
        • организовать взаимосвязь между дисциплинами «Базы данных», «Основы алгоритмизации и программирования»
        • Воспитывающие:
          • воспитывать способность к самостоятельному поиску решения задачи.
          • Оборудование: персональные компьютеры

            Учебный и раздаточный материал:

            • электронный практикум;
            • файл базы данных, подключаемой с помощью ADO-компонентов;
            • задания для самостоятельной работы;

            ПО: Borland Delphi for Microsoft Windows.

            Этапы урока

            Деятельность преподавателя

            Деятельность студентов

            Средства обучения

            1.

            Организационный момент

            Преподаватель приветствует студентов, проверяет посещаемость ,сообщает тему занятия. Студенты записывают тему занятия в тетрадь

            Повторение пройденного материала

            Преподаватель повторяет со студентами основные ADO- компоненты Delphi. Студенты отвечают на вопросы преподавателя Приложение Delphi 3.

            Изучение нового материала

            Преподаватель знакомит студентов со свойствами ADO-компонентов, демонстрирует способы изменения свойств компонентов Delphi, знакомит студентов с событиями обработки компонентов формы. Студенты вместе с преподавателем знакомятся с новыми компонентами и осуществляют создание макета приложения Раздаточный материал: электронный практикум, приложение, файл базы данных, подключаемой с помощью ADO 4.

            Самостоятельная работа студентов

            Преподаватель следит за правильностью выполнения заданий студентами Самостоятельно выполняют дополнительные задания Приложение Delphi, электронный практикум 5.

            Подведение итогов урока, выдача домашнего задания

            Подводит итоги занятия.
            Выставляет оценки студентам
            Выдаёт студентам индивидуальные домашние задания Студенты демонстрируют результаты работы, записывают д/з Задания для самостоятельной работы

            Задание. Информационная система хранит информацию о врачах, о пациентах и их лечении. База данных включает в себя следующие сущности:

            Создать проект в Borland Delphi и обеспечить доступ к БД , используя ADO-компоненты.

            I. Повторение пройденного материала в форме опроса

            Вопросы:
            – Для чего используются ADO-компоненты в Delphi?
            – Какие ADO-компоненты необходимо использовать для организации связи с базой данных? (Приложение 1)
            – Какие свойства ADO-компоненты компонентов вы знаете?

            II. Изучение нового материала

            Читайте также:  Значок лупы в верхнем левом углу андроид

            Вывод данных с помощью ADO-компонент на форму.
            Создаем проект Delphi, сохраняем созданное нами приложение в папку «Больница», где расположен файл базы данных.
            Помещаем на форму компонент ADOConnection с вкладки ADO палитры компонентов.
            Устанавливаем свойство ConnectionString для этого компонента (на вкладке «Поставщик данных» выбираем «Microsoft Jet 4.0 OLE DB Provider» на вкладке «Подключение» выбираем подключаемый файл).
            Поскольку файл базы данных и приложение, разрабатываемое в Delphi, находятся в одной папке «Больница», удобнее при подключении не указывать весь путь к базе данных, а ввести только его полное имя. Тогда при переносе в дальнейшем папки «Больница» в другое место, никаких проблем с приложением возникать не будет!

            Проверяем подключение.
            Помещаем на форму компонент ADOTable с вкладки ADO палитры компонентов.
            Устанавливаем свойство Connection (указываем наш ADOConnection1) – в свойстве TableName компонента ADOTable должно появиться окно ‘Database Login’ а затем в выпадающем списке появится список таблиц нашей базы данных.

            Выбираем таблицу или запрос, которые нам необходимо вывести (обратите внимание, что для вывода каждой таблицы или запроса необходим отдельный компонент ADOTable или ADOQuery соответственно, но ADOConnection для всех один!).
            Устанавливаем на форму компонент DataSource со вкладки Data Access.
            Свойство DataSet этого компонента меняем на ADOTable1.
            Помещаем DBGrid с вкладки Data Controls и свойству DataSource присваиваем значение DataSource1.
            Помещаем DBNavigator с вкладки Data Controls и свойству DataSource присваиваем значение DataSource1.
            Активируем подключенную таблицу, задав свойству Active компонента ADOTable1 значение True, в результате чего в DBGrid отобразится таблица из нашей базы данных. Можно активировать таблицу с помощью кнопки:
            procedure TForm1.Button1Click(Sender: TObject).

            begin
            adotable1.Open;
            end;

            Чтобы каждый раз при запуске программы на экран не выходило окно ‘Database Login’, установите свойство LoginPrompt компонента ADOConnection равным False.

            III. Создание интерфейса приложения

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

            ADOTable1 – таблица «Пациенты»
            ADOTable2 – таблица «№ палаты»
            ADOTable3 – таблица «Врачи»
            ADOTable4 – таблица «Палаты»
            ADOTable5 – таблица «Препараты»
            ADOTable6 – таблица «Лечение»

            Размещаем на форме компоненты DataSource1, …, DataSource6, которые могут нам понадобиться для отображения или передачи данных. Для каждого из них определяем в свойстве DataSet соответствующую таблицу.

            Устанавливаем на форму компонент DBLookupComboBox (см. рис 5) с вкладки Data Controls (список будет использоваться для отображения номеров палат ) и в свойствах ListSource, ListField и KeyField этого компонента задаём имя отображаемого столбца . Свойство DataSource компонента необходимо оставить пустым.

            Отобразим с помощью компонента DBGrid содержимое таблицы «Пациенты» (присваиваем свойству DataSource значение DataSource1)

            Обеспечим возможность модификации созданной таблицы с помощью компонента DBNavigator и проверим его работоспособность (если редактирование таблицы с помощью этого компонента оказалось затруднительным, то необходимо изменить свойство Options компонента DBGrid, задав dgEditing ––> true)

            Определим событие OnClick для компонента DBLookupComboBox, при выполнении которого выводится информация о пациентах, размещённых в палате с выбранным номером. Реализовать это событие можно двумя способами:

            1 способ (с использованием фильтра):

            Размещаем на форме компоненты DataSource7, который будет использован для отображения и передачи данных запроса ADOQuery1 ( определяем в свойстве DataSet компонент ADOQuery1). Создаём SQL- запрос на вывод информации о пациентах путём использования свойства SQL ––> Text компонета ADOQuery1 с помощью команды form1.ADOQuery1.SQL.Text:=’SELECT … FROM …..’.
            Открываем SQL- запрос и осуществляем фильтрацию информации по заданному критерию с помощью команд:

            2 способ (критерий отбора задаётся в разделе Where SQL-запроса):

            Создаём SQL-запрос на вывод информации о пациентах находящихся в палате, номер которой задан в компоненте DBLookupComboBox, с помощью команды:

            Определим событие OnClick для кнопки «Назначение номера палаты и лечащего врача».
            При нажатии на эту кнопку открывается форма «Добавление информации» (см. рис.10), на которой отображаются «№ палаты» и «ФИО врача» пациента с заданным номером. Поиск этих данных осуществляется (см. рис. 1) по схеме:

            Палаты.[Код пациента] ––> Палаты. [Код палаты]
            Палаты.[Код пациента] ––> Палаты.[Код врача] ––> Врачи.[Код врача] ––> Врачи.[ФИО врача]

            Определим событие OnClick для кнопки «Добавить» (см. рис.7). При нажатии на эту кнопку введённая информация добавляется в поля «Код пациента», «код врача» и «Код палаты» таблицы «Палаты»:

            Определим событие OnClick для кнопки «Информация о всех пациентах» (см. рис.7), которая будет отображать в компоненте DBGrid содержимое Таблицы «Пациенты» с помощью команды:

            Размещаем на форме (см.рис.11 )компонент DBLookupListBox с вкладки Data Controls (список будет использоваться для отображения фамилий врачей, работающих в больнице) и в свойствах ListSource, ListField и KeyField этого компонента задаём имя таблицы и отображаемого столбца . Свойство DataSource компонента необходимо оставить пустым.

            Ниже приведён фрагмент программы, позволяющий при включении переключателя «Врачи» отобразить содержимое поля «ФИО врача» в компоненте DBLookupListBox

            Создадим для компонента DBLookupListBox контекстное меню (см. рис.11), позволяющее редактировать записи в списке (добавлять записи, редактировать записи, удалять записи):
            Рассмотрим фрагмент программы для добавления информации в список DBLookupListBox с помощью функции Inputbox (на рис. 13 показано окно для ввода данных, реализованное с помощью функции Inputbox ).

            Рассмотрим фрагмент программы для редактирования информации в списке DBLookupListBox (на рис. 15 показано окно для ввода данных, реализованное с помощью функции Inputbox )

            Рассмотрим фрагмент программы для удаления информации из списка DBLookupListBox

            IV. Самостоятельная работа студентов

            По аналогии с п.7 предыдущего раздела, создадим событие OnClick для кнопки «Назначение лечения».При нажатии на эту кнопку открывается форма «Добавление информации о лечении», на которой будет отображен код выбранного пациента, можно выбрать название препарата из списка (компонент DBLookupComboBox), задать количество препарата, выбрать врача из списка (компонент DBLookupComboBox) и ввести дату назначения. По заполненным данным должны быть определены «код_ препарата», «количество_препарата», «код врача», «дата назначения» и информация добавлена в таблицу «Лечение»

            По аналогии с п.10 предыдущего раздела, создадим событие обработки нажатия на переключатель «Препараты» (см. рис.11). При включении переключателя «Препараты» необходимо отобразить содержимое поля «Препараты» в компоненте DBLookupListBox.

            По аналогии с п.11 предыдущего раздела, добавим в программу возможность редактирования записей из списка «Препараты» (добавлять записи, редактировать записи, удалять записи). Для того, чтобы обе таблицы (и таблица «Врачи» , и таблица «Препараты») редактировались с помощью одного контекстного меню компонента DBLookupListBox, необходимо определить какой из переключателей включен. Для этого опереторы по редактированию таблиц необходимо внедрить в условные конструкции представленные ниже:

            V. Подведение итогов урока, выдача домашнего задания

            Преподаватель подводит итоги занятия, выставляет оценки студентам, выдаёт студентам домашние задание:
            Создать SQL-запрос, подсчитывающий количество пациентов в больнице
            Создать SQL-запрос, позволяющий удалить из базы данных выписавшихся больных (дата выписки которых больше сегодняшней даты)

            Полный код программы и файл базы данных вы можете просмотреть в Приложении 2.

            Оцените статью
            ПК Знаток
            Добавить комментарий

            Adblock
            detector