ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Исторически сложилось так, что программирование возникло и развивалось как процедурное программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование ООП - это методика разработки программ, в основе которой лежит понятие объекта, как некоторой структуры, описывающей объект реального мира, его поведение.
Задача, решаемая с использованием методики ООП, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними. Замечание Строго говоря, для того, чтобы разрабатывать приложения в Delphi на базе предоставляемых средой разработки компонентов, знание концепции ООП не является необходимым. Однако для более глубокого понимания того, как программа взаимодействует
с компонентами, что и почему Delphi добавляет в текст программы, материал данной главы весьма полезен. Класс Классический язык Pascal позволяет программисту определять свои собственные сложные типы данных - записи records. Object Pascal, поддерживая концепцию объектно-ориентированного программирования, дает возможность определять классы. Класс - это сложная структура, включающая в себя помимо описания данных описание процедур и функций, которые могут быть выполнены над представителем класса - объектом.
Вот пример описания простого класса TTPersonclass Private fname string 15 f address string 35 public procedure show end Данные класса называются полями, процедуры и функции - методами. В приведенном примере TTPerson - это имя класса, fname и faddress - имена полей, show - имя метода. Замечание Согласно принятому в Delphi соглашению имена полей должны начинаться с буквы f от слова field
- поле. В программе описание класса помещают в раздел описания типов type. Объект В программе представители класса - объекты, объявляются в разделе var. Например, так var student TTPerson professor TTPerson Следует обратить особое внимание на то, что в Object Pascal объект - это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные
объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных. Выделение памяти осуществляется при помощи специального метода класса - конструктора, которому обычно присваивают имя create создать. Чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor. Ниже приведено описание класса TTPerson, в состав которого введен конструктор.
TTPerson class private fname string 15 f address string 35 constructor create конструктор public procedure show метод end Выделение памяти для данных объекта происходит присваиванием значения результата применения метода-конструктора к типу классу объекта. Например, после выполнения инструкции professor TTPerson.create выделяется необходимая память для данных объекта professor . Помимо выделения памяти, конструктор, как правило, решает задачу присваивания полям объекта начальных
значений, т. е. осуществляет инициализацию объекта. Ниже приведен пример реализации конструктора для объекта TTPerson. constructor TTPerson.create begin fname faddress end Реализация конструктора несколько необычна. Во-первых, в теле конструктора нет привычных инструкций New, обеспечивающих выделение динамической памяти всю необходимую работу по выделению памяти выполняет
компилятор. Во-вторых, формально, конструктор не возвращает значения, хотя в программе обращение к конструктору осуществляется как к методу-функции. После объявления и инициализации объект можно использовать, например, установить значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Хотя объект является ссылкой, однако правило доступа к данным с помощью ссылки, согласно которому после имени переменной, являющейся ссылкой, надо ставить
значок на объекты не распространяется. Например, для доступа к полю fname объекта professor вместо professor. Fname надо писать professor.fname Очевидно, что такой способ доступа к полям объекта более естественен. Если в программе некоторый объект больше не используется, то можно освободить память, занимаемую полями этого объекта. Для выполнения этого действия используют метод-деструктор free. Например, чтобы освободить память занимаемую полями объекта professor, достаточно записать professor.
free Метод Методы класса процедуры и функции, объявление которых включено в описание класса выполняют действия над объектами класса. Чтобы метод был выполнен, надо указать имя объекта и имя метода, отделив одно имя от другого точкой. Например, инструкция professor.Show вызывает применение метода show к объекту professor. Фактически инструкция применения метода к объекту - это специфический способ записи инструкции вызова
процедуры. В программе методы класса определяются точно так же, как обычные процедуры и функции, за исключением того, что имя процедуры или функции, являющейся методом, состоит из двух частей имени класса, к которому принадлежит метод, и имени метода. Имя класса от имени метода отделяется точкой. Ниже приведен пример определения метода show приведенного выше класса TTPerson. метод show класса TTPerson procedure TTPerson. show begin
ShowMessage Имяfname13Адрес faddress end Следует обратить внимание на то, что в инструкциях метода доступ к полям объекта осуществляется без указания имени объекта. Инкапсуляция и свойства объекта Под инкапсуляцией понимается скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса. В Object Pascal ограничение доступа к полям объекта реализуется при помощи свойств объекта.
Свойство объекта характеризуется полем, хранящем значение свойства, и двумя методами, обеспечивающими доступ к полю свойства. Метод установки значения свойства называется методом записи свойства write, метод получения значения свойства называется методом чтения свойства read. В описании класса перед именем свойства записывают слово property свойство. После имени свойства указывается его тип, затем имена методов, обеспечивающих доступ к значению свойства.
После слова read указывается имя метода, обеспечивающего чтение свойства, после слова write - записи свойства имя метода. Ниже приведен пример описания класса TTPerson, содержащего два свойства Name и Address. type TNamestring15 TAddressstring35 TTPerson class Private FNameTname значение св-ва Name FaddressTAdress значение св-ва
Address Constructor Create Name Tname Procedure Show Function GetNameTName Function GetAddressTAddress Procedure SetAddress NewAddress TAddress Public Property Name Tname read GetName Property Address Taddress read GetAddress write SetAddress end В программе для установки значения свойства не обязательно записывать инструкцию применения
к объекту метода установки значения свойства, можно записать обычную инструкцию присваивания значения свойству. Например, чтобы присвоить значение свойству Adress объекта student, достаточно записать Student.Address С.Петербург, ул.Садовая 21, кв. 3 Компилятор перетранслирует приведенную инструкцию присваивания значения свойству в инструкцию вызова метода Student.
SetAddress С. Петербург, ул. Садовая 21, кв .3, Внешне использование свойств в программе ничем не отличается от использования полей объекта. Вместе с тем между свойством и полем объекта существует принципиальное отличие при присвоении и чтении значения свойства автоматически вызывается процедура, которая выполняет некоторую работу. В программе на методы свойства можно возложить некоторые дополнительные задачи. Например, с помощью метода можно проверить корректность присваиваемых свойству значений, установить
значения других, логически связанных со свойством, полей, вызвать вспомогательную процедуру. Оформление данных объекта как свойства позволяет ограничить доступ к полям, хранящим значения свойств объекта, например можно разрешить только чтение. Чтобы инструкции программы не могли изменить значение свойства, в описании свойства надо указать только имя метода чтения. Попытка присвоить значение свойству, предназначенному только для чтения, вызывает ошибку времени компиляции.
В приведенном выше описании класса TTperson свойство Name доступно только для чтения, а свойство Address - для чтения и записи. Установить значение свойства, защищенного от записи, можно во время инициализации объекта. Ниже приведены методы класса ттрегзоп, обеспечивающие создание объекта класса ттрегзоп и доступ к его свойствам. конструктор объекта TTPerson Constructor
TTPerson.Create NameTName begin FNameName end метод получения значения свойства Name Function TTPerson.GetName begin Result FName end метод получения значения свойства Address Function TTPerson.GetAddress begin Result FAddress end метод изменения значения свойства Address Procedure TTPerson.SetAddress NewAddress TAddress Begin if FAddress then FAddress NewAddress end Приведенный конструктор объекта
TTPerson создает объект и устанавливает значение поля FName, определяющего значение свойства Name. Инструкции программы, обеспечивающие создание объекта класса TTPerson и установку его свойства, могут быть, например, такими student TTPerson.create Иванов student.addressyл. Садовая, д.З, кв.25 Наследование Концепция объектно-ориентированного программирования предполагает возможность
определять новые классы посредством добавления полей, свойств и методов к уже существующим классам. Такой механизм получения новых классов называется порождением. При этом новый, порожденный, класс потомок наследует свойства и методы своего базового, родительского класса. В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee сотрудник может быть порожден от рассмотренного выше класса ттрегзоп путем
добавления поля Department отдел. Объявление класса TEmployee в этом случае может выглядеть так TEmployee class TTPerson FDepartment integer номер отдела constructor Create Name TNameDep integer end Заключенное в скобки имя класса TTPerson показывает, что класс TEmployee является производным от класса
TTPerson. В свою очередь, класс ттрегзоп является базовым для класса TEmployee. Класс TEmployee имеет свой собственный конструктор, который обеспечивает инициализацию класса родителя и своих полей. Вот пример реализации конструктора класса TEmployee constructor TEmployee.CreateNameTnameDepinteger begin inherited Create Name FDepartment Dep end В приведенном примере директивой inherited вызывается конструктор родительского
класса, затем присваивается значение полю класса потомка. После создания объекта производного класса в программе можно использовать поля и методы родительского класса. Ниже приведен фрагмент программы, демонстрирующей эту возможность. engineer TEmployee.create Сидоров , 413 engineer.addressyл.Блохина, д.8, кв.10 Первая инструкция создает объект типа TEmployee. Вторая устанавливает значение свойства, которое относится
к родительскому классу. Директивы Protected и Private Помимо объявлений элементов класса полей, методов, свойств описание класса, как правило, содержит директивы protected защищенный и private закрытый, которые устанавливают степень видимости элементов класса в программе. Элементы класса, объявленные в секции protected, доступны только в порожденных от него классах. Область видимости элементов класса этой секции не ограничивается модулем, в котором находится описание
класса. Обычно в секцию protected помещают описание методов класса. Элементы класса, объявленные в секции private, видимы внутри модуля. Эти элементы не доступны за пределами модуля, даже в производных классах. Обычно в секцию Private помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, помещают в секцию protected. Ниже приведено описание класса
TTPerson, в которое включены директивы управления доступом. TTPerson class private FnameTName значение св-ва Name FaddressTAddress значение св-ва Address protected Constructor Create Name TName Function GetName TName Function GetAddressTAddress Procedure SetAddressNewAddressTAddress Property NameTname read
GetName Property Address Taddress read GetAddress write SetAddress end Замечание Если надо чтобы элементы класса были полностью скрыты, то определение класса следует поместить в отдельный модуль. Полиморфизм и виртуальные методы Полиморфизм - это возможность использовать одинаковые имена для методов, входящих в различные классы. Концепция полиморфизма обеспечивает при применении метода к объекту использование именно того метода,
который соответствует классу объекта. Пусть определены три класса, один из них является базовым для двух других. type базовый класс TPersonclass fname string имя constructor Create name string function info string virtual end производный от базового Tperson TStudclass TPerson fgr integer номер группы constructor Create name string gr integer function info string override end производный от базового
Tperson Tprofclass TPerson fdep string название кафедры constructor Createnamestringdepstring function info string override end В каждом из этих классов определен метод info. В базовом классе при помощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает
соответствующий метод родительского класса метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override. Ниже приведено определение метода info для каждого класса. function TPerson.info string begin result end function TStud.infostring begin result fname гp. IntTostrfgr end function TProf.info string begin result fname каф. fdep end В программе список людей можно представить массивом объектов класса
TPerson. listarray1 SZLof TPerson Замечание Здесь следует вспомнить, что объект - это указатель. Объявить подобным образом список можно потому, что Object Pascal позволяет указателю на родительский класс присвоить значение указателя на дочерний класс. Поэтому элементами массива list могут быть как объекты класса TStud, так и объекты класса Tprof. Вывод списка можно осуществить применением метода info к элементам
массива, например, так st for il to SZL do SZL - размер массива-списка if listi NIL then ststinfo.listi13 ShowMessagest Во время работы программы каждый элемент массива может содержать как объект типа TStud, так и объект типа Tprof. Концепция полиморфизма обеспечивает применение объекту именно того метода, который соответствует типу объекта. Процедура TForml.Button1click, которая запускается в результате щелчка на кнопке
Добавить Button1, создает объект listn класса TStud или TProf. Класс создаваемого объекта определяется состоянием радиокнопки студент RadioButton1, Процедура TForml.Button2Click, которая выполняется в результате щелчка на кнопке Список Button2, применяя метод info к каждому объекту списка элементу массива, формирует строку, представляющую собой весь список. Классы и объекты Delphi Для реализации интерфейса
Delphi использует библиотеку классов, которая -содержит большое количество разнообразных классов, поддерживающих форму и различные компоненты командные кнопки, поля редактирования и т. д Во время проектирования формы приложения Delphi автоматически добавляет в текст программы необходимые объекты. Если сразу после запуска Delphi просмотреть содержимое окна редактора кода, то там можно обнаружить следующие строки type Tform1 class TForm private Private declarations public
Public declarations end var Form1 Tform1 Это описание класса исходной, пустой, формы приложения и объявление объекта - формы приложения. Когда программист, добавляя необходимые компоненты, создает нужную форму, Delphi формирует описание класса формы. Когда программист создает функцию обработки события формы или ее компонента, Delphi добавляет объявление метода в описание класса формы приложения. Помимо классов визуальных компонентов в библиотеку классов входит класс обработки исключительных ситуаций
ошибок, класс общего управления приложением и другие. Рассмотрение этих классов в задачу данной книги не входит. Создание простого текстового редактора 1. Поместите компонент Bevel на странице Additional на новую форму и присвойте его свойству Align значение alTop. 2. На компонент Bevel поместите четыре кнопки.
Озаглавьте их 0реn Save, Save As и Exit. Многоточие в конце имени представляет собой секретный код Windows, означающий, что щелчок на кнопке вызовет еще один диалог, а не приведет к немедленному выполнению некоторого действия. 3. Поместите на форму компонент Memo и установите следующим образом его свойства Свойство Значение Align alClient ScrollBars ssBoth Lines пусто 4.
Измените заголовок формы на My Editor. Затем поместите на форму компонент OpenDialog и присвойте его свойствам следующие значения Свойство Значение Default Ext ТХТ Options.ofHideReadOnly True Options.ofFileMustExist True Options.ofNoReadOnlyReturn True Title Open Text File 5. Для того чтобы открыть окно
Filter Editor Редактор фильтра, дважды щелкните на свойстве Filter. 6. Заполните две первые строки в колонке Filter Name Имя фильтра названиями фильтров Text files и All files, а в колонке Filter Фильтр введите соответствующие фильтры .ТХТ и 7. Поместите на форму компонент SaveDialog и установите для его свойств такие значения
Свойство Значение Default Ext ТХТ Options.ofHideReadOnly True Options.ofOverwritePrompt True Options.ofNoReadOnlyReturn True Title Save Text File 8. Введите тот же набор фильтров, что и для диалога открытия файла. 9. Создайте обработчик события OnClick для кнопки Exit, содержащий одну команду Close 10. Для обработчика события
OnClick кнопки Open используйте следующие строки WITH OpenDialog1 DO IF Execute THEN BEGIN Memo1.Lines.LoadFromFileFilename HistoryList.AddFilename CaptionMy Editor- ExtractFilenameFilename SaveDialog1.FilenameFilename Filename End 11. Дважды щелкните на кнопке Save и введите следующую строку в качестве ее обработчика события
OnClick . Memo1.Lines.SaveToFile SaveDialog1.Filename 12. Наконец, для кнопки Save As укажите следующее WITH SaveDialog1 DO IF Execute THEN BEGIN Memo1.Lines.SaveToFileFilename CaptionMy Editor - ExtractFilenameFilename End Мы создали простой текстовый редактор. Он позволяет загружать, редактировать и сохранять небольшие и средние файлы.
Возможности этого редактора приблизительно такие же, как и у приложения Notepad Блокнот Windows. Можно вырезать, копировать и вставлять текст, используя стандартные комбинации клавиш Windows. Имя каждого открытого файла добавляется в список диалога открытия файла на случай, если вам потребуется открыть его снова. Этот проект нам еще понадобится, поэтому сохраним его. Назовем модуль MYEDITU.PAS, а главный проект - MYEDIT.
PRJ. Диалог выбора шрифта. Загрузите опять проект MyEdit и поместите на форму компонент FontDialog. Переместите кнопку Exit вправо и вставьте кнопку с заголовком Font между кнопками Save As и Exit. В обработчик события OnClick новой кнопки поместите следующий код WITH FontDialog1 DO IF Execute THEN BEGIN Memo1.Font Font Следующую строку поместите в обработчик события
OnApply компонента FontDialog Memo1.Font FontDialog1. Font Запустите программу и загрузите файл. С помощью кнопки Font выберите какой-нибудь шрифт. Используя все возможности, создайте самый необычный вариант. Содержимое файла будет отображаться выбранным вами шрифтом с применением указанного размера, стиля и цвета. Опять откройте диалог выбора шрифта и переместите его так, чтобы он не закрывал самого окна
редактора. Внесите несколько изменений в окне диалога и щелкните на кнопке Apply Применить. Изменения станут действительными немедленно, а диалог Font Шрифт не закроется. Это упрощает испытание различных возможностей. Обратите внимание, что в этом примере программы, после того как была использована кнопка Apply Применить, вы никак не сможете отменить внесенные изменения.
С другой стороны, это не такая уж и большая беда - если не устраивает только что выбранный шрифт, можно вернуть шрифт, использовавшийся раньше. Сохраните обновленный проект MyEdit, обладающий теперь возможностью изменять шрифты. Компонент Memo не обладает способностью отображать больше одного шрифта сразу. Для этого существуют другие компоненты. Добавим в свою программу диалог выбора цвета.
1. Поместите на новую форму диалог выбора цвета компонент ColorDialog и присвойте его свойству Color значение clWhite. 2. Установите свойство Ctl3D формы в False, а в качестве константы цвета также выберите clWhite. 3. Поместите на форму новую кнопку, назовите е Color. В обработчик события OnClick формы поместите следующие строки
IF ColorDialog1.Execute THEN Form1.Color ColorDialog1.Color 4. Запустите программу. Диалог выбора принтера. Загрузите опять проект MyEdit и поместите на него диалог настройки принтера компонент PrinterSetupDialog. Компонент Bevel расположите таким образом, чтобы осталось место для второго ряда кнопок, где разместите две новые кнопки, оза-аавленные
Print и Print Setup Создайте обработчик события OnClick кнопки Print Setup с единственной строкой кода PrinterSetupDialog1.Execute Запустите программу и щелкните на кнопке Print Setup кнопка Print пока еще делать ничего не может. Появится диалог. Подготовка к печати. Диалог Print Setup Настройка принтера используется для выбора и конфигурации принтера.
Когда дело дойдет до печати, в действие вступит диалог Print Печать. В проект MyEdit добавьте компонент PrintDialog, оставив все его свойства со значениями, установленными по умолчанию. Дважды щелкните на кнопке Print, и замените пару begin-end следующим кодом VAR POutput TextFile N LongInt BEGIN IF PrintDialog1.Execute
THEN BEGIN AssingPrn POutput Rewrite POutput Printer.Canvas.Font Memo1.Font FOR N 0 to Memo1.Lines.Count 1 DO WritelnPOutput, Memo1.Lines N CloseFile POutput END END Перейдите в верхнюю часть модуля и добавьте Printers в оператор uses. Найдите строку в начале файла, начинающуюся со слова uses.
После этого слова добавьте имя модуля и запятую. Выберите на форме компонент FontDialog и присвойте его свойству Device значение fdBoth, чтобы ограничить выбор шрифтами, которые годятся и для экрана, и для принтера. Мы только что добавили в ваш редактор возможность печати. Этот редактор не позволяет печатать несколько копий или направлять их в подбор, но вы сможете распечатать содержимое редактора любым шрифтом. А с помощью диалога
Print Setup Выбор принтера вы сможете выбрать принтер, ориентацию бумаги и параметры конфигурации, соответствующие вашему принтеру. Диалог поиска и замены текста. Загрузите проект MyEdit и установите свойство HideSelection компонента Memo в False. На форме разместите компоненты FindDialog и ReplaceDialog и выберите их оба. Дважды щелкните на свойстве
Options и установите frHideMatchCase, frHideWholeWord и frHideUpDown в True. Добавьте во второй ряд кнопки с заголовками Find и Replace Для события OnClick кнопки Find используйте следующую строку FindDialogl.Execute а для кнопки Replace следующую строку ReplaceDialogl.Execute Выберите компонент FindDialog, перейдите на страницу
Events и дважды щелкните на событии OnFind. Вставленную Delphi пару begin-end замените следующим блоком кода VAR Buff, P, FT Pchar BuffLen Word begin WITH Sender AS TFindDialog DO BEGIN GetMem FT, Length FindText 1 StrPCopy FT, FindText BuffLen Memo1.GetTextLen 1 GetMem
Buff, BuffLen Memo1.GetTextBuff Buff, BuffLen P Buff Memo1.SelStart Memo1.SelLength P StrPos P, FT IF P NIL THEN MessageBeep 0 ELSE BEGIN Memo1.SelStart P-Buff Memo1.SelLength Length FindText END FreeMem FT, Length FindText 1 FreeMem Buff, BuffLen END end Когда закончите, щелкните на компоненте
ReplaceDialog, перейдите на страницу Events в окне Object Inspector и щелкните на кнопке раскрытия списка обработчика события OnFind. Из появившегося списка выберите только что созданный обработчик события для FindDialog. Теперь создайте обработчик события OnReplace со следующими строками WITH Sender AS TReplaceDialog DO WHILE True DO BEGIN
IF Memo1.SelText FindText THEN FindDialodFind Sender IF Memo1.SelLength 0 THEN Break Memo1.SelText ReplaceText IF NOT frReplaceAll IN Options THEN Break END Сохраните программу, запустите ее и загрузите текстовый файл. Замените в нем все точки на восклицательные знаки и сохраните его. Задание. Создайте форму для открытия графических файлов.
Лабораторная по Delphi. Работа с базами данных. Работа с Database Form Expert. Delphi имеет мощное средство создания таблиц путем внесения или ре дактирования полеи на форме. Рассмотрим простой пример того, как построить приложение, используя эксперт форм базы данных. В этом примере использован один из образцов баз данных, включенных в Delphi. Использование эксперта форм базы данных . 1.
Запустите Delphi. 2. Выберите DatabaseDatabase Form Expert из главного меню. 3. В первом диалоговом окне выберите Create a simple form и Great a form using TTable objects нажмите Next. 4. В следующем диалоговом окне выберите DBDEMOS в секции Drive or Alias. Выделение DBDEMOS выводит список таблиц, составляющих базу данных, в панели списка слева.
5. Выберите EMPLOYEE.DB щелкните мышью на Next. 6. Нажмите кнопку , чтобы указать, что вы хотели бы построить форму с отображением всех полей . 7.Продолжайте выбирать Next, принимая все по умолчанию до окончания процесса создания формы. 8.Выберите из меню RunRun. Это простейшее приложение дает пользователю полный контроль над таблицей, содержащей информацию о служащих. Чтобы манипулировать записями, вверху формы размещена панель управления
базой данных. Каждая кнопка панели выполняет определенную функцию базы данных. Поработав с этим простым пользовательским интерфейсом, выберите Close, чтобы завершить приложение. Использование Database Desktop для создания новой таблицы Создадим таблицу нового образца. Borland Database Desktop доступна в меню Tools в IDE
Delphi. Выберите эту опцию для вызова рабочего стола. Создание новой таблицы 1. Выберите опцию FileNewTable из главного меню. В этот момент появится диалоговое окно, запрашивая тип таблицы, которую вы хотите создать. При разработке новых приложений наиболее удобна простотой работы с ней база данных Paradox поэтому выберите Paradox 7 и нажмите ОК. 2.
Прежде всего вы должны решить, какие данные вы хотите хранить в вашей таблице и каков тип этих данных. В этом примере рассмотрим таблицу информации о студентах университета. Каждое поле должно быть занесено в раздел Field Roster список полей диалогового окна. Чтобы занести первое поле, введите SSN в колонке имени поля Field Name. Это означает, что вы хотите добавить новое поле, названное
SSN. 3. Следующая часть информации требует указания, какой тип данных будет храниться в поле. Номера Social Security социальной страховки хранятся как строки символов. Щелкните правой кнопкой мыши на поле Type, чтобы показать имеющиеся в наличии типы данных. Для строк Paradox использует тип Alpha. Выберите Alpha из списка типов данных. 4. Некоторые типы данных требуют указания размера.
Это говорит базе данных о наибольшем объеме данных, который может храниться в поле. Что касается номеров страховки, то нам известно, что SSN состоит из 11 символов, включая тире, так что введем в это поле число 11. Некоторые типы данных, такие как Number число, не используют понятия размер поля. 5. В заключение нужно сообщить базе данных, является ли поле ключом, или нет.
Ключ означает, что за каждой записью закреплено уникальное значение. Использование ключей в базах данных чрезвычайно важно. Пометим поле SSN как ключ, потому что вы знаете, что каждому студенту будет соответствовать одна- единственная запись и каждый студент имеет уникальный номер страховки. 6. Чтобы определить следующее поле в таблице, нажмите
Enter. Продолжайте определять поля, используя информацию из таблицы Таблица .Определение полей таблицы и их атрибутов Имя поля Тип Размер Ключ SSN А 11 Name А 30 Class A 10 Phone A 8 GPA N 7. Щелкните мышью на кнопке Save As, чтобы сохранить информацию о таблице. 8. В диалоге Save Table as укажите в окне списка Drive or alias имя
DBDEMOS. Введите studinfo.db в текстовом окне New file name и для сохранения таблицы щелкните мышью на ОК. Как из Delphi получить доступ к созданной таблице Простейший способ создания приложения, имеющего доступ к таблице в Delphi это Form Expert. Теперь рассмотрим, какие шаги необходимо предпринять для построения приложения на пустом месте. Простейшим способом обеспечения доступа и манипуляции данными является использование
визуальных компонентов базы данных. Визуальные компоненты базы данных хранятся на двух страницах библиотек визуальных компонентов Data Access и Data Control. Органы управления в странице Data Access используются для того, чтобы дать Delphi информацию о таблицах базы данных и функциях, которые должны быть использованы, тогда как страница Data Control содержит ряд визуальных компонентов, которые могут отображать информацию базы данных или
обеспечивать интерфейс для манипуляций данными таких, как вставка, удаление и модификация. Как предоставить Delphi сведения о таблице - компонент ТТаЫе Чтобы использовать таблицу, нужно в качестве первого шага дать знать Delphi, что вы намереваетесь взаимодействовать с таблицей. Чтобы сделать это, нужно поместить на форму объект
Table, которому доступны табличные данные. Проверка списка свойств показывает, что там есть свойство, называемое DataBaseName и TableName. Это два минимальных свойства, которые нужно установить для того, чтобы таблица была доступна Delphi. Свойство DataBaseName соответствует имеющимся в наличии псевдонимам базы данных. TableName описывает таблицы в базе данных, которые должны быт использованы. Обеспечение доступа к таблице с информацией о студентах
Первым шагом в создании приложения, обеспечивающего доступ к базе данных с информацией о студентах, которую вы создали ранее, должно быть размещение компонента ТТаЫе на вашей форме и конфигурирование свойств DataBaseName и TableName. 1. Создайте новое приложение. 2. Поместите на форму компонент ТТаЫе. Компонент TTable может быть найден на странице
DataAccess библиотеки визуальных компонентов. 3. В списке свойств установите DatabaseName как DBDEMOS. DBDEMOS - это псевдоним базы, в которой будет сохраняться таблица STUDINFO.DB. 4. После установки свойства DatabaseName свойство TableName должно показать окно списка с перечнем всех таблиц, имеющихся в наличии в базе данных. Выберите STUDINFO.DB как имя базы данных. 5. Установите значение свойства
Active равным true. Это немедленно от крывает таблицу при запуске приложения. Если установить значение false, приложение не будет иметь доступа ни к каким данным в таблице до тех пор, пока свойство не станет равным true во время исполнения. 6. Установите свойство Name равным Studinfo. Во время исполнения можно модифицировать два других свойства - Readonly и Exclusive. Установка значения свойства
Readonly равным true позволяет приложению только просматривать данные в базе данных без возможности их модификации. Опция Exclusive разрешает доступ к данным только этому приложению. Теперь у приложения есть вся информация, которая необходима для подключения к таблице. Однако нет никакого способа манипуляции данными таблицы до тех пор, пока объект таблицы не будет связан с объектом DataSourse. Обеспечение связи - компонент
TDataSourse Delphi имеет возможность доступа к информации в базе данных, которая доставляется рядом компонентов, известных как наборы данных DataSets, одним из которых является компонент TTable. Привязанные к данным ком-оненты data-aware - это органы управления, которые отображают и манипулируют теми данными, которые доступны Delphi. Чтобы обеспечить уровень абстракции для органов управления, которые могут перемещаться по данным и отображать информацию, был разработан
TDataSource. TDataSource также позволяет узнать, изменялись ли данные, и определить, каково состояние набора или источника данных. Добавление DataSource 1. Выберите DataSource и добавьте его на форму. 2. Установите свойство DataSet равным Studinfo. Это свяжет источник данных с компонентом TTable с именем Studinfo, который в свою очередь получает доступ в таблицу
STUDINFO.DB в базе данных DBDEMOS. 3. Установите имя для DataSource как dsStudent. Органы управления, привязанные к данным - просмотр и модификация данных Итак, вы организовали все необходимое для связи с таблицей. Однако теперь надо решить, как данные должны быть отображены, и как ими манипулировать. Наиболее просто это можно сделать с помощью органов управления, привязанных к данным их называют data-
aware или data-bound. Большинство средств управления с привязкой к данным предназначено для связи полей базы данных с визуальным компонентом. Стандартные привязанные компоненты весьма мощны, просты в использовании, и Delphi имеет обширный набор этих компонентов. За исключением DBNavigator, все компоненты на странице Data Control используются для отображения информации баз данных. Чтобы начать работать с ними, добавьте к вашему примеру сетку
DBGrid. Добавление привязанной к данным сетки DBGrid 1. Поместите компонент DBGrid на вашу форму. Это первый из размещенных вами на форме компонентов, который видим во время исполнения измените его размер так, чтобы он занял большую часть формы. 2. Установите свойство DataSource равным dsStudent это свяжет сетку с источником данных. 3. Что при этом происходит Как только было установлено свойство
Data-Source, на сетке автоматически стали появляться имена полей. Если в таблице STUDINFO.DB были данные, то они должны были бы отображаться даже во время проектирования. Однако если значение свойства Active было установлено равным False, то ничего нельзя увидеть до тех пор, пока оно не станет равным True. 4. Запустите приложение. С этого момента данные действительно могут быть введены в сетку.
Напечатайте номер SSN, нажмите кнопку Tab, напечатайте имя. Продолжайте нажимать TAB до тех пор, пока не заполните все поля. По завершении первой записи компонент DBGrid автоматически сдвинет курсор на следующую строку. Продолжайте добавление нескольких простых записей в таблицу. Обратите внимание, что если введены две записи с одинаковым
SSN, произойдет ошибка. 5. Завершите приложение и добавьте еще один орган управления - компонент DBEdit. Он отображает одно поле таблицы. .В отличие от сетки, которая может отображать несколько записей, DBEdit отображает поле текущей записи. Текущая запись - это просто запись, к которой в данный момент имеет доступ машина базы данных. DBGrid указывает текущую запись, отображая рядом с ней треугольный значок. 6. Добавьте DBEdit на форму и установите свойство
DataSource равным dsStudent. Теперь нужно указать поле, чтобы компонент знал, что отображать. Чтобы установить поле, установите свойство DataField равным SSN. 7. Запустите программу. Обратите внимание, что если вы переходите к другой записи щелчком на ней в сетке, указатель текущей записи перемещается. Это приложение предоставляет пользователю определенные возможности управления, но для больших баз данных это неприемлемо.
Delphi имеет мощное средство управления, которое позволяет перемещаться между объектами в таблицеDBNavigator. DBNavigator это панель, которая позволяет легко передвигаться между таблицами. Добавление DBNavigator. Выберите DBNavigator и поместите его на форму. Установите свойство DataSource равным dsStudent. Установите свойство ShowHint равным True. Это вызовет появление подсказки всякий раз, когда курсор мыши будет задерживаться
над кнопкой панели. Запустите приложение. Обратите внимание, как просто перемещаться между записями, прыгать к началу или концу базы данных и редактировать записи.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |