Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_Створення пошукових полів.doc
Скачиваний:
1
Добавлен:
06.09.2019
Размер:
252.93 Кб
Скачать

Вдосконалений приклад з пошуковими полями

Перед тим як рухатися далі, треба спочатку зробити обробник для меню «Удалить запись». По цій події треба вивести запит на підтвердження знищення та якщо відповідь є позитивною, то можна знищувати.

Створіть такий обробник та напишіть в ньому наступне:

begin

If Application.MessageBox(pChar('Ты действительно хочешь удалить '

+DataModule1.BookTableDSDesigner.AsString), 'Внимание!!!',

MB_OKCANCEL)=id_OK then

DataModule1.BookTable.Delete;

end;

Тут виводиться повідомлення за допомогою функції MessageBox. В першому параметрі (текст повідомлення) пишеться текст 'Ты действительно хочешь удалить ' плюс значення поля «Фамилия» обраного рядка - DataModule1.BookTableDSDesigner.AsString. Саме складне тут - DataModule1.BookTableDSDesigner.AsString. Щоб зрозуміти цю конструкцію треба перейти в модуль DataModule. Тут двічи натиснути по компоненту BookTable, де у нас підключений основний довідник, а потім по полю «Фамилия». Подивитися в об’єктному інспекторе ім’я цього поля, воно повинне бути BookTableDSDesigner. Зараз зрозуміло? Я пишу ім’я модуля даних (DataModule1), потім через крапку ім’я поля (BookTableDSDesigner) та метод AsString, який повертає значення поля у вигляді рядка.

Можете піднятися в розділ type модулю DataModule1 та впевнитися, що всередині нашего об’єкту TDataModule1 є оголошення властивості BookTableDSDesigner типу TWideStringField.

Сподіваюсь, що з першим рядком все зрозуміло. Якщо ні, то запусти приклад та подивись, що відбудеться якщо спробувати знищити рядок.

В другому рядку я просто знищую поточний рядок за допомогою виклику методу Delete таблиці - DataModule1.BookTable.Delete.

Зараз приклад практично готовий. Єдиний недолік – в сітці перегляду даних замість назви міста відображається індекс рядка в довіднику. Це дуже незручно, тому треба виправити цей недолік.

Перейди в модуль DataModule1, та виділи компонент BookTable. Зроби його неактивним – в властивості Active встановіть false. Зараз двічі натисніть по цьому компоненту та перед тобою відчинеться вже знайомий редактор полів. Створимо нове поле, яке буде містити текстову назву міста для рядків таблиці. Для цього натисніть всередині вікна редактору та в меню, яке з’явиться, оберіть пункт New Field. Відчинеться вікно, яке зображене на рисунке 1.12:

Рис. 1.12 Вікно створення нового поля

Створення нового поля можливе лише при неактивній таблиці, тому ми й виставили в властивості Active значення false.

Заповніть поля цього вікна наступним чином:

В полі Name введіть «Town»

В полі Type вкажіть тип String – рядок.

В полі FieldType оберіть Lookup – пошукове поле.

В полі KeyField (ключеве поле) оберіть поле «Город». Це поле головної таблиці,

по значенню якого треба буде відшукувати текст в іншій таблиці.

В полі DataSet треба вказати TownTable – це таблиця-довідник міст, де треба шукати.

В полі Lookup Keys вкажіть Key1 – це поле в таблиці довіднику, за яким треба здійснювати пошук.

В полі Result Field вкажіть поле «Название города» - це поле, текст якого буде підставлятися. Зараз нажміть ОК.

В вікні редактору полів з’явиться ново поле з іменем Town. В самій БД такого поля не буде, тому що воно динамічне та існує лише в пам’яті машини, коли програма є запущеною. Перетащіть його мишкою вище, ближче до поля Город (рис. 1.13):

Рис. 1.13

Знову зроби таблицю BookTable активною та спробуй зараз запустити програму. Подивись на поле Town та ти побачишь зараз там тестову назву міста (рис. 1.14).

Рис. 1.14 Результат роботи програми

Зараз програма виглядає більш красивою та цікавою. Єдине – можна зробити поле «Город» невидимим, для того щоб користувач не бачив ці незрозумілі числа, а над полем Town написати надпис «Город». Для цього двічі натисніть по компоненту BookTable, виділіть поле «Город» та встановіть в властивості Visible значенне false. Тепер виділіть поле Town та в властивості DisplayLabel напишіть «Город».