Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi и БД.doc
Скачиваний:
77
Добавлен:
11.04.2015
Размер:
471.04 Кб
Скачать

14.3.2. Методы компонента tadoTable

Как видите, свойств очень много, и большинство из них очень полезные.

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

- Bookmarkvalid — этот метод проверяет правильность вкладки. В качестве единственного параметра нужно указать вкладку типа Tbookmark, и если она является "действительной", то результатом будет true.

( - canceiupdates — отменить обновления, сохраненные в кэш-памяти.

- compareBookmarks — сравнение двух вкладок. У метода два параметра типа TBookmark. Эти две вкладки сравниваются. Если вкладки равны, то результат равен нулю. Если первая меньше второй, то результат будет -1. Если первая больше второй, то результат равен единице.

- DeieteRecords — удалить записи. У метода один параметр, определяющий, какие записи удалять. Вы можешь указать следующие его значения:

• ArCurrent — удалить только текущую запись;

• arFiitered — удалить записи, удовлетворяющие установленному фильтру;

• а г АИ — удалить все записи;

• arAiichapters — удалить записи во всех разделах ADO.

- Append — добавить новую запись в конец таблицы.

- cancel — отменить изменения текущей строки, если изменения еще не были сохранены с помощью метода Post.

- close — закрыть таблицу.

- Delete — УДЗЛИТЬ Текущую строку.

- Edit — перейти в режим редактирования. После этого можно изменять значения полей.

- FieidByName — найти поле по имени. В качестве единственного параметра нужно указать имя поля в виде строки, и в результате получаем ссылку на поле в виде объекта TFieid.

- First — перейти на первую строку в таблице.

- insert — вставить новую строку в таблицу.

- isEmpty — если метод вернет true, то в таблице нет записей.

- Last — перейти на последнюю запись в таблице.

- Next — перейти на следующую запись.

- Post — принять все изменения.

- Prior — двигаться на предыдущую запись в таблице.

- Refresh — обновить информацию о данных.

- updateRecord — обновить текущую запись.

14.4. Управление отображением данных

В предыдущем примере все работает прекрасно, только вот поле Key пользователю видеть абсолютно ненужно. Это поле — счетчик, и его значение увеличивается автоматически. А раз пользователь не может влиять на значения этого поля и оно не несет для него полезной информации, то и отображать это поле не надо. Чтобы спрятать от пользователя ненужные поля и показывать только то, что мы хотим, и в том виде, в котором хотим, необходимо научиться управлять отображением данных. Но прежде чем приступить к изучению этого вопроса, давайте создадим в нашей базе еще два поля Дата и мобильник. Загрузите базу данных в Access, щелкните по ней правой кнопкой мыши и в появив- шемся меню выберите Конструктор. Далее, в режиме конструктора необходимо выполнить ряд действий.

1. Добавьте поле с именем Дата и типом — Дата / время.

2. Добавьте поле с именем мобильник и типом — логический. Если в строке находится номер мобильного телефона, то в этом поле будем ставить true, иначе false.

Закройте таблицу.

Теперь перейдем в Delphi и попробуем отобразить изменения в уже созданном примере.

Для начала давайте перенесем компоненты доступа к базе данных в отдельное специальное окно. Выделите компоненты ADOConnectioni, DataSourcel и BookTabie. Теперь выберите из меню Edit пункт Cut, чтобы эти компоненты скопировались в буфер обмена и сразу удалились с формы. Выберите меню File | New | Data Module. Этим вы заставите Delphi создать специальное окно Data Module, которое подходит для хранения компонентов доступа к базам данных.

Выберите из меню Edit пункт Paste, чтобы вставить в это окно вырезанные нами компоненты. Расположите теперь эти компоненты в окне так, как вам, будет удобно (например, как показано на рис. 14.8).

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

Откройте Менеджер проектов (в меню Project надо выбрать Project Manager) и расположите это окно так, чтобы вам было удобно в любой момент получить к нему доступ (рис. 14.9). Теперь, когда потребуется перейти из главной формы в модуль данных DataModuie или обратно, вы легко можете это сделать с помощью Менеджера проектов, дважды щелкнув кнопкой мыши по нужной форме.

/ DataModulel ига 13

ADOConnectiorrt DataSourcel

333

BookTable

Рис. 14.8. Окно DataModule

Project Manager

I Telephone & X

New Remove

Files Path

3|j ProjectGroup! ЕЛРгодгагл Files\Bodand\Delphi7SPtoiects

Ё!-|р Telephon.exe РЛСуО\ВсиЖ\БиблияОе1рЫ\ПримерыУ"лаеа 14

ffi §j] MainUnit РЛСуО\ВооК\БиблияОе1рЫ\Прнмеры\Глава14

Я 'ID }iCTI!FFH!|ll':'tr''r''P"''''''c''^"''" Ое1рИ1\Примеры\Глаеа 14

Рис. 14.9. Менеджер проектов

Если вы хоть раз уже открывали какую-то форму из Менеджера проектов и не закрывали, то ее можно найти на вкладках в окне редактора кода, как это показано на рис. 14.10.

Внимание

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

На этом инструкции по работе с оболочкой заканчиваются.

Перейдите в главную форму, и вы сразу увидите, что в нашей сетке DBGridi нет данных. Почему? Да потому, что она потеряла связь с компонентами доступа к данным. Выделите сетку и щелкните кнопкой мыши по свойству DataSource. Вы увидите, что в выпадающем списке ничего нет. Это потому что все нужные компоненты мы убрали в, отдельную форму и главная форма пока об этом не знает.

i »4 TDalaModulet „>^. _...

i Cj »..;.Ч(..;г~п--'-"'-;Н1ш1Е

! Q Uses

^interface

iuses

SysUtils, Classes, DB, ADODB;

| type

,! TDataHodulel = class (TDataHodule)

I ADOConnectionl: TADOConnection;

DataSourcel: TDataSource;

BookTable: TADOTable;

i BookTableKeyl: TAutoIncField;

I BookTableDSDesigner: THideStriugField;

BookTableDSDesigner2: TWideStringField;

BookTableDSDesignerS: TWideStringField;

BookTableemail: TUideStringField;

BookTableDSDesignei:4: TIntegerField;

BookTableDSDesigner5: TDateTlmeField;

BookTatoleDSDesigner6: TBooleanField;

private

{ Private

public

1: 1

Рис. 14.10. Вкладки форм в редакторе кода

Чтобы форма узнала о существовании компонентов, ей нужно определить в разделе uses модуль DataModuleUnit. Это можно сделать вручную или выбрать из меню File пункт Use Unit (в этот момент должно быть выделено окно кода главной формы, потому что мы подключаем новый модуль именно к ней). В появившемся окне нужно выбрать имя нового модуля — DataModuleUnit (пока оно одно в списке) и нажать ОК.

Проверьте теперь в редакторе кода, чтобы после ключевого слова implementation Появилась ЗЭПИСЬ — uses DataModuleUnit;:

implementation

uses DataModuleUnit;

{$R *.dfm}

Вот теперь можно выделять сетку DBGridl и в свойстве Datasource указать компонент Datasource, данные которого должны быть отображены в сетке (DataModulel.DataSourcel).

Теперь перейдем в модуль DataModuie и попытаемся настроить отображение данных. Дважды щелкните мышью по компоненту вооКТаЫе, и перед вами появится окно редактирования полей базы данных (рис. 14.11).

Keyl

Фамилия

Имя

Телефон

e-mail

Город

Дзга

Мобильник.

Рис. 14.11. Окно редактирования

полей базы данных

1

Пока оно пустое. В него нужно добавить все поля базы данных. Для этого щелкните по нему правой кнопкой мыши и в появившемся меню выберите пункт Добавить все поля (Add All Field). Окно автоматически заполнится именами полей.

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

Также можно выделять отдельные поля и в объектном инспекторе редактировать их свойства. Свойства у полей могут быть разные в зависимости от типа поля.

Продолжим формирование базы данных. Первое, что мы должны сделать, — убрать видимость счетчика (поле Key). Ранее уже договорились, что пользователю оно не нужно, и он не должен его видеть. Выделите это свойство и в объектном инспекторе установите в свойстве visible значение false (это свойство есть у всех полей). Сразу же можете перейти в главную форму или запустить программу, чтобы убедиться в том, что поле Keyi больше не отображается.

Теперь отредактируем длину отображения колонок. Для этого выделите поле Фамилия. В базе данных мы выделили под это поле 50 символов (на всякий случай). В сетке ширина колонки будет отображаться по умолчанию на всю длину. Но чаще всего фамилии не превышают 15 символов, поэтому нет смысла отображать всю длину. Намного удобней отображать только 15 символов, а если что-то не поместится, то пользователь программы в любой момент сможет раздвинуть колонку и увидеть недостающие символы. За ширину колонки отвечает свойство DispiayWidth (это свойство есть у всех полей). По умолчанию в нем стоит значение физической ширины поля, но мы укажем там 15. Опять же, на саму базу данных это не влияет, и поле все еще имеет размер 50, но ширина отображаемой колонки в сетке б^ цет 15. Точно так же сократите ширину поля имя.

Рассмотрим еще несколько свойств полей.

- DefauitExpression — здесь можно оставить значение по умолчанию.

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

- Maxvalue — максимально допустимое значение. Если это числовое поле, и оно должно изменяться в определенных рамках (например, от 0 до 100), то желательно указать эти ограничения здесь, чтобы сократить вероятность опечатки пользователя. Все люди склонны к ошибкам, так пускай программа автоматически сокращает вероятность таких ошибок.

- MinValue — минимально допустимое значение.

- Readonly — поле только для чтения. Если какое-то поле не должно изменяться, установите у него в свойстве Readonly значение true. В этом случае вы обезопасите программу от случайного изменения данного поля пользователем.

- Required — если здесь true, то поле является обязательным и обязательно должно иметь какое-то значение. Если пользователь ничего не укажет, то программа сообщит об этом. Допустим, что какое-то поле у вас участвует в расчетах. Если в этом поле не окажется данных, то программа может зависнуть. Есть два пути решения этой задачи. Первый путь — при расчете проверять наличие в поле данных или требовать, чтобы пользователь обязательно что-то ввел. Второй путь предпочтительней, если это поле действительно важное. В этом случае представьте запись в телефонном справочнике без телефона. Спрашивается, зачем тогда нужна эта запись, если не указан телефон? Таким образом поле для номера телефона можно делать обязательным.

- Tag — просто числовое значение, которое можно использовать по своему усмотрению.

Теперь в нашем окне помещается практически вся необходимая информация и не надо лишний раз использовать полосы прокрутки.

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

Внимание

При вводе данных учитывайте разделитель чисел. В большинстве русскоязычных ОС Windows в качестве разделителя используется точка или знак косой черты (/). К тому же первым идет число, потом месяц и потом год (в англоязычной версии первым может идти месяц). Пробелы недопустимы. Этот порядок и разделитель настраиваются в настройках ОС. Войдите в Панель управления и запусти окно Настройка региональных параметров (рис. 14.12). Здесь вы можете изменить все настройки ввода даты, времени и чисел.

[Настройка региональным параметров

Числа I Денежная единица | Время) Дата

г Образцы—^—

Полож.; 123456789,00 Отриц.: -123456789,00

] 2

разделитель целой и дробной части: ||

Количество дробных знаков:

Разделитель групп разрядов:

Количество цифр в группе: . ; : . '

Признак отрицательного числа:

формат отрицательных чисел::

Вывод нулей в начале числа:

Разделитель элементов списка:

Система единиц: у . ~.

] 123 456 789

FU

0.7

(Метрическая

ОК Отмена

JLJ

J

~31

Рис. 14.12. Настройка формата ввода и отображения даты

Вернемся к Delphi. Выделите поле дата. Первое, что мы должны сделать, — уточнить, какую именно дату здесь надо вводить. Так как это телефонный Delphi и базы данных 447

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

О отредактировать имя поля в базе данных (не совсем разумно);

О заставить Delphi отображать в заголовке поля нужный текст.

За текст, отображаемый в заголовке, отвечает свойство DispiayLabel (это свойство есть у всех полей). Давайте в нем введем текст "Дата рождения".

Можете проверить, что теперь в заголовке отображается нужный текст.

Теперь отредактируем формат отображения даты. За это отвечает свойство DispiayFormat. Тут можно указывать текстовый формат, в котором нужно отображать дату. Как отображать? Вспомните функцию FormatDateTime и ее первый параметр (см. разд. 10.5). Вот именно это здесь и можно указывать. Многие программисты предпочитают использовать для отображения полный формат — "dddddd".

Ку, и, наконец, нужно указать маску ввода для даты. Ее нужно указывать в свойстве EditMask и так же, как мы это делали — у компонента TMaskEdit.

Для даты желательно всегда указывать маску ввода — 99/99/9999.

Если вы теперь запустите пример, то в поле дата рождения все даты будут отображаться в полном формате (рис. 14.13). Если дважды щелкнуть мышью по этому полю в любой строке (войти в режим редактирования строки), то дата сразу перейдет в режим редактирования (см. вторую строку на рис. 14.13).

.[* Телефонный справочник

Фамилия' Имя [Телефон je-mail (Город | Дата рождения

Иванов

Петров

Сидоров

0; 12 Декабрь 2002 г. Да

О ИДЙИДВ Да

СИ 22 Март 2002 г. Нет

Рис. 14.13. Улучшенный вид поля Дата рождения

Последнее, что нам надо сделать, — это отредактировать поле мобильник. Пока что здесь отображаются значения true или false. Но мы русские люди и для нас будет удобнее видеть родные Да или Нет. Выделите это поле и в объектном инспекторе найдите свойство Displayvaiues. Для булевых полей здесь нужно указать два значения в формате true ; false, т. е. сначала указываем положительное значение и после точки с запятой отрицательное (кавычки указывать не надо). Таким образом указывается значение — да ; нет.

Теперь в поле мобильник будут отображаться понятные слова, да и при редактировании теперь нужно вводить не true или false, а понятные да или нет.

^ Примечание

На компакт-диске в папке \ Примеры \ Глава 14 \ Database2 вы можете увидеть пример этой программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]