Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы программирования..pdf
Скачиваний:
8
Добавлен:
15.11.2022
Размер:
10.32 Mб
Скачать

Процедурный подход предполагает работу с базовыми типами данных. Однако областей применимости ПС так же много, как и областей деятель­ ности человека.

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

Эту проблему возможно решить несколькими путями:

1.Построением языка программирования, содержащего как можно больше типов данных, и выбором для каждого класса задач некоторого подмножества этого языка. Такой язык иногда называют языкомоболочкой. На роль языка-оболочки претендовал язык PL-1, оказавшийся настолько сложным, что так и не удалось построить его формализованное описание. Отсутствие формализованного описания, однако, не помешало широкому применению PL-1 как в Западной Европе, так и в СССР.

2.Построением расширяемого языка, содержащего небольшое ядро

идопускающего расширение, дополняющее язык типами данных

иоператорами, отражающими концептуальную сущность конкретного класса задач. Такой язык называют языком-ядром. Как язык ядро были разработаны языки Simula и Алгол-68, не получившие широкого распространения, но оказавшие большое влияние на разработку других языков программирования.

Второй путь решения проблемы концептуальной близости языка програм­ мирования классу решаемой задачи привел к созданию технологии объектноориентированного программирования.

1.2. Сущность технологии объектно-ориентированного программирования

Объектно-ориентированный подход (ОПП) опирается на следующие положения:

1.Программа представляет собой модель некоторого реального процесса, части реального мира.

2.Модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.

3.Объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект.

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

5.Объекты, описанные одним и тем же набором параметров и способные

выполнять один и тот же набор действий, представляют собой класс однотипных объектов.

Рассмотрим интерпретацию этих положений на следующем примере. Пред­ положим, что нам необходимо написать программу, моделирующую ситуацию встречи участника дорожного движения с представителем ГИБДД. Програм­ ма должна использовать объектно-ориентированный подход и отвечать на воп­ рос, будет или нет оштрафован водитель автомобиля. На рис. 1.2 представлено описание основных взаимодействующих объектов этого процесса (сотрудник ГИБДД не показан, так как в контексте поставленной задачи его роль выполняет компьютер). Характерной особенностью каждого из объектов является наличие определенных параметров, значение которых отражает их текущее состояние (значение параметров объекта «автомобиль» свидетельствует, что он может вы­ полнять только один набор действий: стоять на месте). Это состояние может изменяться, если объекты совершают те или иные предписанные им действия (автомобиль поедет после заправки топлива водителем), причем выполнение фиксированного действия зависит от определенных событий (автомобиль будет остановлен сотрудником ГИБДД, если водитель превысит скорость). Действия, совершаемые объектом, могут быть направлены на изменение текущих значе­ ний параметров как самих объектов, так и взаимодействующих с ними либо вызывать на исполнение другие наборы действий (поворот ключа зажигания приводит двигатель автомобиля в работоспособное состояние).

Таким образом, под объектом объектно-ориентированного програм­ мирования понимают совокупность свойств (параметров), методов (набо­ ра операций) и событий, определяющих состояние моделируемого процесса.

Одной из важных особенностей, которые объектно-ориентированное про­ граммированиедобавляеттрадиционным языкам,является механизм, с помощью которого объекты могут наследовать характеристики более простых, более об­ щих объектов. Этим механизмом является наследование, которое приводит к образованию класса объектов. Гипотетический автомобиль, представленный на рис. 1.2, может являться базовым при описании более конкретного класса ав­ томобилей (например, ВАЗ 2110), а водитель может служить прообразом более конкретного водителя (например, только что получившего права).

С точки зрения языка программирования класс объектов можно рас­ сматривать как тип данного, а отдельный объект - как данное этого типа. Определение программистом собственных классов объектов для конкретно­ го набора задач должно позволить описывать отдельные задачи в терминах самого класса задач (при соответствующем выборе имен типов и имен объ­ ектов, их параметров и выполняемых действий).

ина сообщения, имеющие смысл только для производного класса. Обычно говорят, что объект производного класса наследует все свойства своего базового или родительского класса.

Механизм наследования позволяет сократить объем программирования

имаксимально использовать опыт предыдущей работы.

Некоторые параметры объекта могут быть локализованы внутри объек­ та и недоступны для прямого воздействия извне объекта. Например, во время движения объекта-автомобиля объект-водитель может воздействовать толь­ ко на ограниченный набор органов управления (рулевое колесо, педали газа, сцепления и тормоза, рычаг переключения передач), и ему недоступен целый ряд параметров, характеризующих состояние двигателя и автомобиля в целом (не знает, насколько изношены тормозные колодки, точное количество топлива в баке). Такая характеристика ООП получила название инкапсуляция.

Механизм инкапсуляции предполагает невозможность существования свойств и методов в отрыве от объекта, поэтому при удалении объекта удаля­ ются все его свойства, события и методы, при копировании объект копирует­ ся как одно целое, при обращении к объекту организуется вызов конкретного свойства, события или метода.

При традиционном процедурном программировании имя вызывае­ мой подпрограммы или функции однозначно определяет выполняемый код. В объектно-ориентированном программировании допускается использование одних и тех же имен методов для выполнения совершенно разных действий. Такая характеристика ООП получила название полиморфизма.

Механизм полиморфизма значительно упрощает программирование, поз­ воляя использовать одинаковые смысловые наименования для выполнения разнообразных действий.

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

1.3. Использование объектных моделей при организации удаленных соединений

Коммерческая ценность прикладной программы зависит не только от ее способности накоплять и обрабатывать данные, но и от возможности реше­ ния задач большой размерности. Именно этот фактор и является решающим при оценке рыночной стоимости программы. Никакой интерфейс програм­ мы или дизайн разработки не сможет сгладить впечатление о программе, ко­ торая может накапливать информацию только в отдельные типизированные

и

файлы, а не единое хранилище данных. В противном случае, все пользовате­ ли ПК вместо разнородных специализированных АРМов довольствовались бы исключительно Microsoft Excel ввиду наглядности проведения расчетов

и удобства работы.

Дело в том, что все прикладные программы работы с табличными дан­ ными (например, Microsoft Excel или SuperCalc) предназначены для решения задач малой размерности - размер и количество таблиц документа в них явно ограничено (например, каждый лист книги Microsoft Excel состоит из немно­ гим более 65 000 строк, а количество листов книги не может превышать 256). Следовательно, размещать и обрабатывать большие наборы данных (городской телефонный справочник и т.п.) в таких документах в принципе невозможно. Для этого и используются базы данных.

База данных-это единое, структурированное и непротиворечивое хранили­ щеданных. Базыданныхисторическимодифицировалисьисовершенствовались. Поэтому в настоящее время существует 3 принципиально разных категории БД (рис. 1.3).

В настоящее время наиболее распространенной является реляционная модель БД, которая, в свою очередь, разделяется на 3 принципиально разных вида. Каждый такой вид наделен индивидуальным набором потенциальных возможностей и недостатков.

 

Базы данных

 

____________ _ _ ____________

Иерархические

V

Сетевые

(Древовидные)

(Распределенные)

 

Краткая характеристика

Применяются

Среда распределенного

достаточно редко

хранения огромных

и частично.

объемов информации.

(-) Сложность

(-) Зависимость от

разработки

множества внешних

(-) Индивидуальный

факторов

подход

(-) Низкая скорость

(-) Трудность

работы

модификации

(-) Наличие персонала

(-) Несовместимость

(+) Произвольная

________________ __________

Многофайловые

Монофайловые

Реляционные

(Табличные)

Преобладающий тип имеет повседневное применение

(-) Средняя скорость (-) Многомерность (-) Вариантность решения

(+)Математическая

база

(+)Простота

На основе сервера

Рис. 1.3 Общая классификация БД

Современные СВР (например, Visual Basic или Borland Delphi) не предназначаются для разработки БД, хотя эта возможность поддержи­ вается в них на достаточно серьезном уровне. СВР специализируются на создании автономных и интерфейсных приложений, работающих с БД. Сле­ довательно, разработку структуры БД нужно выполнять с помощью других программ - диаграммеров или СУБД (систем управления БД).

Диаграммеры - программы, позволяющие на основе наглядных логи­ ческих схем данных вида «сущность-связь» (entity-relationship) сгенери­ ровать код (SQL-скрипт) создания всех элементов БД (любой реализации SQL). Далее этот скрипт выполняется СУБД, в результате чего создается соответствующая БД. Наиболее известными диаграммерами является ER­ WIN и Oracle ER-Diagrammer.

СУБД - это комплекс прикладных программ, предназначенный для со­ здания и обслуживания БД определенного типа. Некоторые СУБД обладают встроенными диаграммерами. Кроме разработки структуры БД в компетенцию СУБД могут входить и операции преобразования (конвертации) данных, и их сжатия.

Именно СУБД позволяют достаточно комфортно произвести самый важный шаг разработки БД - ее нормализацию. И хотя возможности совре­ менных СВР в отношении БД постепенно расширяются, этап нормализации всегда следует производить только с помощью СУБД. В любом случае БД является независимым от программы набором объектов и требует специаль­ ных объектов сопряжения для подключения к ней.

Общая схема работы с БД представлена на схеме рис. 1.4.

Рис 1.4. Общая схемаработы с БД

Однако объекты сопряжения, в свою очередь, делятся на две группы:

1.Объекты подключения (не отображаются);

2.Элементы объектного интерфейса (отображают данные в наглядном виде).

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

Объекты сопряжения с БД не всегда входят в набор стандартных объек­ тов СВР, и поэтому они могут располагаться на отдельных закладках панели инструментов. В ряде случаев для отображения на панели инструментов таких объектов требуется подключить к проекту соответствующие библиотеки. После этого следует произвести настройку самой панели компонентов.

Схема подключения к БД является индивидуальной для каждого СВР, поэтому дальнейшее одновременное сопоставление объектов сопряжения с БД Visual Basic и Borland Delphi не имеет смысла. Поэтому мы последова­ тельно рассмотрим рекомендуемые схемы подключения и работы с БД для обоих СВР. Во всех случаях требование ввода пароля при подключении к БД появляется автоматически, хотя все профессиональные разработчики ПО идентифицируют пользователя программно.

1.3.1. Объектная модель Microsoft VB

Диалог с пользователем всех стандартных программ подразумевает расположение на диалоговых формах видимых и невидимых элементов уп­ равления. Формы организации интерфейса работы пользователя с БД ис­ пользуют компоненты библиотеки ADO (ActiveX Data Object). Именно эту технологию и рекомендуется использовать для доступа к различным типам данных из всех СВР, разработанных Microsoft.

ADO позволяет программе получить доступ к БД с помощью провайде­ ра OLE DB, который представляет собой универсальный интерфейс доступа к различным источникам данных. Библиотека ADO включает в себя элемен­ ты управления данными и элементы объектного интерфейса, которых впол­ не достаточно для организации комфортной работы пользователя с БД.

Чтобы использовать эти компоненты в проекте, необходимо подклю­ чить библиотеки, которые их содержат. В окне Project—^References установи­ те флажки перед следующими библиотеками (версии могут не совпадать):

-Microsoft ActiveX Data Objects 2.1 Library;

-Microsoft ActiveX Data Objects Recordset 2.1 Library.

Для того чтобы элементы управления появились на панели компонен­ тов, зайдите в окно Project—►Components и пометьте флажками следующие компоненты:

-Microsoft ADO Data Control 6.0 (OLEDB);

-Microsoft DataGrid Control 6.0 (OLEDB);

-Microsoft DataList Control 6.0 (OLEDB);

-Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB). Только после этого ваш проект сможет подключиться к БД.

Однако делать это рекомендуется с помощью «окружения данных» про­

екта. Этот объект (DataEnvironment) позволяет изменять параметры соеди­

нения с БД, так как он объединяет в себе группу объектов «подключений» (Connection), каждая из которых состоит из набора объектов - «команд» (Command). Только объект Command может выполнить непосредственное действие над информацией, хранимой в БД. Хотя приведенный пример под­ ключения к БД является классическим, существует ряд альтернатив.

Рекомендуемая объектная модель подключения к БД представлена на рис. 1.5:

Программа ||

т,

,

Окружение данных является

II

Интерфейсная часть

«контейнером связей»

 

 

 

 

II

Функциональная

программы с различными БД

 

 

Окружение данных

Команды выполняются

Подключение!

только в рамках сеанса

подключения к БД

Команда 1

1

 

 

Команда 1

2

Провайдер

БД 1

 

 

 

 

Подключение!

Провайдер

БД2

 

Команда 2_1

Рис. 1.5. Рекомендуемая объектная модель подключения к БД

Организация комфортной работы с БД возможна только при корректном использовании интерфейсных возможностей Visual Basic по работе с БД. Ин­ терфейсные элементы, взаимодействуя с наборами данных, позволяют пользо­ вателю просматривать, редактировать информацию в БД (в текущей строке - курсоре). А с помощью элементов навигации по наборам данных пользователь получает возможность перемещаться по записям, создавать новые и удалять существующие записи.

Рассмотрим схему взаимодействия интерфейсных элементов (рис. 1.6) с объектами доступа к данным. Приведенный ниже пример является клас­ сическим, но гибкость технологии ADO позволяет организовывать и другие варианты управления данными. Например, в качестве элемента навигации можно использовать разработанный вручную ActiveX-компонент. За счет строгого использования таких компонентов интерфейс программы будет достаточно стильным, а функционал программы значительно разгрузится. Однако начинающим разработчикам ПО использовать в проектах нестан­ дартные (непротестированные) ActiveX-компоненты категорически не реко­ мендуется. Это может стать причиной непредсказуемых ошибок.

Рис. 1.6. Объектная модель организации интерфейса

Обычно в серьезных проектах объекты доступа к данным создаются (и модифицируются) программно. Это позволяет очень гибко оперировать па­ раметрами подключения и состояниями объектов. Но основной выигрыш со­ стоит в последовательном использовании одних и тех же объектов для форми­ рования различных наборов данных.

Например:

Создаем объект «подключение», заполняем его параметры и открываем БД.

Set conMy = New ADODB.Connection conMy.CursorLocation = adllseClient conMy.Provider = “SQL0LEDB.1” conMy.CommandTimeout = 300

conMy.Open “Data Source = MYSERVER; Initial Catalog = SALES”, “SA”, “SA”

Создаем объект «набор данных» и считываем в него содержимое таблицы.

Set rsMy = NewADODB.Recordset

rsMy.Open “ТГ, conMy, adOpenKeyset, adLockOptimistic, adCmdTable

После этого можно приступать к обработке данных.

Конечно, набор данных можно сформировать и на основе SQL-запроса: rsMy.Open “select Name from T1 where Age = 37”, conMy, _ adOpenForwardOnly,

adLockReadOnly

После того как набор данных сформирован, необходимо научиться производить манипуляции с полученными данными в рамках этого объек­ та. Поскольку объект Recordset наделен приведенными ниже свойствами и методами, корректное обращение к данным и навигация по набору данных

не составляет значительного труда. Следующие свойства являются призна­ ками выхода курсора за границы диапазона данных:

-BOF - курсор находится перед первой записью;

-EOF - после последней записи.

Это может произойти при использовании методов навигации:

-MovePrevious - переход к предыдущей записи;

-MoveNext - переход к следующей записи в наборе данных. Разумеется, приведенные ниже методы вызвать подобную ошибку

не могут:

-MoveFirst - переход к первой записи;

-MoveLast - переход к последней записи.

Обладая столь простыми средствами навигации, можно организовать цикл вида «пока не конец набора данных», в котором, например, заполним список ListBoxl значением поля Name в наборе данных rsMy:

While (Not rsMy.EOF)

...ListBoxl .ltems.Add(Cstr(rsMy(“Name”))) или rsMy.Fields(l)...

или rsMy.MoveNext Wend

После того как цикл завершен, следует закрыть объект: rsMy.Close

Эта директива может породить ошибку, если объект уже закрыт. Поэто­ му перед закрытием рекомендуется проверить его текущее состояние:

If (rsMy.State <> adStateClosed) Then rsMy.Close

Но этого еще недостаточно, так как следует очистить память, занимаемую объектом:

Set rsMy = Nothing

После всех действий с БД, как вы уже догадались, следует уничтожить объект Connection.

If (conMy.State <> adStateClosed) Then conMy.Close Set conMy = Nothing

Несмотря на то что такой подход организации доступа к данным доста­ точно эффективен, начинающим разработчикам применять его не следует. Рациональным выходом из сложившейся ситуации является использование стандартных объектов доступа к БД, настройка параметров которых осу­ ществляется во время визуальной разработки проекта. В этом случае разра­ ботчиками допускается значительно меньше ошибок.

Однако у начинающих разработчиков появляются серьезные проблемы с корректным заполнением свойства DataSource всех стандартных объектов. Дело в том, что для всех интерфейсных элементов содержимое этого поля мо­ жет быть вариантным:

1. Окружение данных (Data Environment) - тогда в DataMember - имя команды;

2.Элемент навигации (Data Control);

3.Результат работы определенной команды (Recordset) - в DataField

имя поля.

Следует обратить особое внимание на то, что поля стандартных объектов:

-DataSource - это источник данных;

-DataMember - раздел данных (один из нескольких источников данных);

-DataField - поле источника данных.

Изучение стандартных объектов доступа к данным следует начинать с ADO Data Control, который имеет непосредственную связь с набором записей и позволяет пользователю перемещаться по нему в любом направлении.

ADO Data Control (на форме отображается в виде универсального бегун­ ка) состоит из следующих объектов:

Элемент ADO Data Control наделен следующими важнейшими свойст­ вами:

-BOF и EOF - содержат признак начала и конца набора данных;

-CacheSize - количество строк, выбираемых в память;

-CommandTimeout - время ожидания команды до сообщения об ошибке;

-CommandType - тип команды;

-Connectionstring - информация необходимая для соединения;

-ConnectionTimeout - время ожидания соединения;

-CursorLocation - возвращает местоположение курсора;

-LockType - тип блокировки;

-Mode - ограничения редактирования данных;

-Password - пароль доступа к данным;

-RecordSource - имя таблицы или запроса;

-Элемент способен реагировать на следующие события:

-EndOfRecordset - при достижении последней записи;

-FetchComplete - при заполнении всех записей набора данных;

-WillMove - наступает до изменения текущей позиции;

-MoveComplete - наступает после изменения текущей позиции;

-WillChangeRecordset - до изменения данных;

-RecordsetChangeComplete - наступает после изменения данных;

-WillChangeRecord - до изменения данных в текущей записи;

-RecordChangeComplete - наступает после изменения данных текущей записи;

-WillChangeField - до изменения данных в одном из полей;

-FieldChangeComplete - наступает после изменения данных в любом поле.

Для соединения элемента управления ADO Data Control с источником данных используется свойство ConnectionString, которое находится в разделе General окна свойств элемента (рис. 1.7).

Рис. 1.7. Настройка параметров соединения

Далее убедитесь, что в разделе Advanced установлены все дополни­ тельные параметры (например, время ожидания соединения). А в разделе АН собраны все параметры строки подключения.

Если права доступа пользователя ограничены, он не сможет использовать ряд объектов БД

Рис. 1.8 Настройка параметров прав доступа

После того как соединение настроено, следует определить свои права по отношению к данным (если в БД имеется система паролей). Это происходит в разделе Authentication (рис. 1.8). После этого (что самое главное) следует ука­ зать источник данных, для этого в третьем разделе окна RecordSource нужно выбрать тип команды.

Вполе CommandType имеются следующие стандартные типы команд:

-adCmdUnknown - команда SQL, набранная ниже;

-adCmdTex - KOMaimaSQL, возвращающая текстовый набор данных;

-adCmdTable - на основе таблицы БД;

-adCmdStoredProc - результат вызова хранимой в процедуры БД. Оставшиеся разделы окна Color и Font позволяют настроить внешний

вид объекта и на его функционировании не отражаются.

После того как команда корректно сформирована, она появляется в окне конструктора окружения данных. Ярлычок объекта зависит от его содержа­ ния. Если команда возвращает набор данных (таблица, просмотр или SQLзапрос), в окне отображаются все информационные поля структуры.

Однако навигация по такому набору данных проблематична, так как элемент ADO Data Control требует самостоятельного подключения и не мо­ жет «приспосабливаться» к существующему набору данных. В таких случа­ ях для комфортной навигации и отображения данных используют элемент DataGrid.

DataGrid отображает набор данных в табличном виде и обладает следу­ ющими свойствами:

-DataSource - окружение данных, ADO Data Control или Recordset;

-DataMember - имя объекта Command (только если в DataSource - окружение данных).

Этих свойств вполне достаточно для отображения записей и навига­ ции по набору данных. Однако объект DataGrid может отображать не все поля набора данных. Кроме этого, он может блокировать указанные поля от редактирования, отображать данные в указанном формате, задавать ширину столбцов и т.п.

Для внесения изменений в структуру DataGrid нужно выбрать в контекстном меню объекта пункт Edit. После этого объект переходит в ре­ жим редактирования, в котором становится возможным в пункте Properties контекстного меню выделенного столбца таблицы установить соответству­ ющие свойства столбца. С помощью пунктов контекстного меню Append, Insert и Delete можно комплектовать таблицу столбцами. При этом следует обязательно производить настройку источника данных в разделе Properties Colums каждого столбца.

Для проектирования «бумажных» документов в распоряжении разра­ ботчика имеется специальный объект DataReport и инструментальное средс­ тво - конструктор отчетов Data Report Designer. Любой отчет основывается на ранее подготовленном наборе данных. Поэтому оформлять бумажный до­ кумент имеет смысл только после создания запроса.

Объект Data Report обладает следующими разделами:

-ReportHeader - заголовок отчета (отображается однократно перед отчетом);

-PageHeader - заголовок страницы (выводится на каждой новой странице);

-Detail - содержание отчета (строка соответствует записи в наборе данных);

-geFooter - нижний колонтитул страницы (на каждой странице);

-ReportFooter - нижний колонтитул отчета (отображается однократно).

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

-GroupHeader - заголовок группы раздела (для Detail);

-GroupFooter - нижний колонтитул группы.

После того как отчет добавлен к проекту (выбран пункт меню Project Add Data Report), на панели компонентов (в разделе DataReport) появились новые компоненты:

-RptLabel - текстовая строка (аналог Label для форм);

-RptTextBox - текстовое поле (поле БД);

-Rptlmage - поле графического изображения;

-RptLine - разделяющая линия отчета;

-RptShape - фигура (рамки, круги и другие примитивы);

-RptFunction - вычисляемое ноле отчета (опирается на функцию). Приведем список стандартных функций элемента RptFunction:

-Sum - сумма по столбцу для всех строк;

-Min - минимальное значение столбца;

-Мах - максимальное значение столбца;

-Average - среднее арифметическое по столбцу;

-Standard Deviation - стандартное отклонение;

-Value Count - счетчик значений (количество непустых строк);

- Row Count

- счетчик строк.

Для профессионального проектирования отчетов следует изучить свойства DataReport:

-Bottom и TopMargin - размер верхнего и нижнего поля;

-DataMember - имя объекта Command для доступа к данным;

-DataSource - источник данных;

-Font - шрифт печати отчета;

-GridX и GridY - размер сетки по горизонтали и вертикали;

-Left и RightMargin - размер левого и правого полей;

-ReportWidth - ширина отчета;

-Title - текст заголовка отчета.

Для управления объектом DataReport используются методы:

-ExportReport - вывод данных отчета в файл *.txt, *.htm и т.п. (без изображений);

-PrintReport - вывод отчета на печать (ShowDialog, Range, PageFrom, PageTo);

-Refresh - обновление данных отчета;

-Show - отображение отчета в окне предварительного просмотра.

1.3.2. Пример приложения, использующего технологию ADO и DataEnvironment

|Крунков

 

 

 

 

 

 

 

 

 

 

 

 

D3ZTЗапись1 из 3

 

Тмм1

Заказчик

Дета

Адрес

Кол.

Кол.

Неполадка

Устранена?

чел.

час.

 

 

 

 

 

 

► Романов

01.10.2000

: Т имиряэвва 12-4

1

•2

 

течь батареи ___

.1

J 1

Лобанов

01.10 2000

Попова 45-17

 

1

 

1замена заглушки

 

Шемякина

0 1 :1 0 .2 0 0 0

■Колесова 89-01

г

 

 

замена батареи

 

 

ЖКУ N*12

01.1 0.2000

Бригадирская

 

 

. свароч работы

|

 

Демьянов

! 03.01.2000 | 1Пихтовая 12-7

Г2...............1

_____г: замена труб

*

ЖКУ N*12

05.01.2000 !' Бригадирская __

;4

,

 

; проФ работы

 

 

Дукаев

^ fo5.‘oY.2bob ' О льмовская Эа-12

РГ

2

 

1течь батареи

 

 

Смирнов

; 05.01.2000

|Коме, проспект 7-14 _ ;2

:3

 

: ликвид пробки

“ [1

!

Дылдин

15.01.2000“

Попова 56-41

■1

2

 

течь батареи

! i

 

Жулаев

,17.01.2000 ■Речная 3-52

! 1

1 12

 

: течь батарей

[1..

....]

 

 

 

 

 

 

 

Выбор

Private idx As Integer

Метод ADO для динамического отображения навигации

Private Sub Adodcl_WillMove(ByVal adReason As ADODB.EventReasonEnum, adStatus _

As_ADODB.EventStatusEnum, ByVal pRecordsetAsADODB.Recordset20) Adodcl .Caption = “Запись" & CStr(Adodc1.Recordset.AbsolutePosition) & “ из

& CStr(Adodc1 .Recordset.RecordCount) End Sub

Выбор

Private Sub cmd_v_Click() If idx > 0 Then

With x_DataEnv

If .rscmd_sql.State = adStateOpen Then

.rscmd_sql.Close End If

.cmd_sql idx

If .rscmd_sql.RecordCount > 0 Then

MsgBox “Найден “ & .rscmd_sql(“disp”).Value,, “Внимание!” End If

End With

Set w_DataGrid.DataSource = x_DataEnv Else

MsgBox “нет записей”, , “Ошибка” End If

End Sub

Вперед

Назад

Private Sub Command 1_Click()

Private Sub Command2_Click()

If Not (x_DataEnv.rscmd_disp.EOF)

If Not (x_DataEnv.rscmd_disp.BOF)

Then_

Then_

x_DataEnv.rscmd_disp.MoveNext

x _ D a t a E n v . r s c m d _ d i s p .

End Sub

MovePrevious

 

End Sub

Начало

Private Sub Command3_Click() x_DataEnv.rscmd_disp.MoveFirst End Sub

Private Sub Text1_Change(lndex As Integer) idx = Val(Text1(lndex).Text)

End Sub

Конец

Private Sub Command4_Click() x_DataEnv.rscmd_disp.MoveLast End Sub

SQL-код команды x_DataEnv.rscmd_sqL

SELECT t_disp.disp, t_zakaz.zakaz, t_work.data_w, t_work.adres, t_work.n_peopl, t_work.n_chas, t_work.nepol, t_work.nepol_y_n FROM t_disp, t_work, t_zakaz WHERE t_disp.id = t_work.id_t_disp AND t_work.id_t_zakaz = t_zakaz.id and t_disp.id=?

1.3.3. Объектная модель Borland Delphi

Объектная модель Borland работы с БД отличается большей строгостью и определенностью. При этом рекомендуется производить визуальную разра­ ботку проекта, а свойства объектов БД изменять статически.

Рассмотрим классическую схему взаимодействия программы с БД (рис. 1.9):

Рис. 1.9. Объектная модель взаимодействия Borland Delphi и БД

Провайдером организации доступа к данным является BDE-процессор БД, разработанный Borland. Физическое обращение к БД происходит по ее маске (или псевдониму), созданной утилитой BDE Administrator (входит в комплект Delphi). Неотображаемые элементы доступа к данным распола­ гаются в контейнере связей (модуле данных) и используют ранее созданную маску БД (рис. 1.10).

Рис 1.10. Компоненты удаленного соединения Borland Delphi и БД

Чтобы создать модуль данных, выберите пункт главного меню File—>New Data Module.

Рис 1.11. Структура модуля данных

Объекты доступа к данным (закладка Data Access):

-DataBase - база данных (на время разработки рекомендуется Con­ nected = true);

-Table - таблица БД (Active, Delete, First, Next, Prior, Cancel, BOF, EOF...).

Обращение к полям: TableIName.AsString := ‘Привет’; или TablelName. Value := ‘Привет’;

Tablel.FieldByName(‘Name’).Value := ‘Привет’; Tablel.Fields[2].Value := ‘Привет’;

Поля таблицы могут быть связаны с физическим полем, вычислены

(Calculated) в обработчике события OnCalcFields или

подставлены (Lookup)

из этой же и другой таблицы. Все наборы данных

наделены счетчиком

RecordCount, возвращающим количество записей, и номером текущей записи RecNo. Кроме этого, имеется индекс самого поля, количество которых не может превышать FieldCount.

Рассмотрим пример:

For i:=l to Tablel .RecordCount do begin

Tablel.RecNo:= i;

For j:=0 to (Tablel.FieldCount-1) do ListBoxl.Items.Add(Tablel.Fields[j]. AsString);

end;

- Query - набор данных на основе SQL-запроса;

Select Ш, Name from tl where (Ш > 100)

- статический текст запроса.

Select ID, Name from tl where (ID > :pID)

- статический текст с внеш­

ним параметром.

После того как тип параметра установлен (свойство Params), его можно подставить:

Query l.Params[0].AsInteger := i; Queryl.ParamByName(‘pID’).Value:= i;

Формирование динамического SQL-оператора:

Query 1.Active := false; (или Query 1.Close;) Queryl.SQL.Clear;

Query 1.SQL.Add(‘Select * from tl ’); (или Query 1 .Assign(Memol .Lines)) Query 1.Active := true; (или Query1.Open;)

-DataSource - источник данных (необходим элементам управления). Элементы управления данными (закладка Data Controls)

-DBGrid - таблица для отображения набора данных (детально - Colums Editor);

-DBNavigator - элемент для навигации по набору данных;

-DBText и DBEdit - элементы для отображения и редактирования полей записи;

-DBMemo - многострочный текстовый редактор полей набора данных;

-DBImage-элементотображенияграфическойинформации,хранящейся в таблице;

-DBListBox и DBComboBox - списки значений поля из открытой таблицы;

-DBLookupListBox и DBLookupComboBox - списки подстановок; Элементы разработки отчетов (закладка QReport):

-QuickReport - отчет, основанный на наборе данных. Состоит из набора полос (свойство Bands), в которые комплектуются другими элементами отчета. Программно вызывается методами Preview и Print.