Обробка виключень при роботі з БД

Розробник повинен передбачати появу виключень при роботі користувача з БД і вміти їх обробляти. Найбільш розповсюджені виключення:

a) Дублювання ключів;

b) Помилка перевірки БД;

c) Помилковий стан для данної операції.

(a) Для запобігання дублюванню ключів слід примусово формувати унікальні ключі шляхом створення лічильника для ключового поля. Тобто для ключового поля в базі даних слід встановити значення Autoinc.

(b) При порушенні правила валідації виникає виключення, яке слід обробити сформувавши попередження для користувача. Обробник події вміщується на подію OnValidate для відповідного поля.

(c) Якщо розробник не впевнений в якому стані знаходиться набір даних в поточний момент, слід використати TDataSource для перевірки стану БД.

TDataSource має три ключові події, що пов‘язані зі станом набору даних:

OnDataChange;

OnStateChange;

OnUpdateData.

Подія OnStateChange відбувається кожного разу, коли змінюється поточний стан DataSet. Наприклад, після використання методу Post, DataSet завжди переходить в режим перегляду (dsBrowse). Після відкриття таблиці набір даних також завжди знаходиться у стані dsBrowse. Якщо спробувати виконати команду, яка несумісна з цим станом, то виникає виключення. Наприклад, спробувати виконати у стані dsBrowse введення даних або їх редагування.

 

Питання для самоперевірки

1. Які методи забезпечують зменшення кількості помилок при введенні даних до БД?

2. Які два способи використання поля зі списком Ви знаєте ?

3. Що таке Data Set?

4. Які стани Data Set Ви знаєте?

5. В наслідок чого можуть виникнути виключення при роботі з БД?

6. Які засоби уникнення виключень Ви знаєте?

 

Лабораторна робота №3

Тема: Робота з полями таблиць БД. Методи навігації по БД. Створення обчислюваних полів в таблицях та проведення обчислень в середовищі Delphi.

Мета: Набути навичок обробки даних з БД в середовищі Delphi.

Завдання:

1. Організувати роботу з полями таблиць БД в програмному режимі.

2. Створити обчислювані поля в таблицях для реалізації функцій згідно індивідуального завдання.

3. Запрограмувати обчислення в середовищі Delphi.

4. Організувати виведення результатів обчислень на екран.

 

Теоретичні положення

В найпростішому випадку поля розглядаю як елементи масиву, але при їх обробці слід враховувати тип даних, щоб уникнути виключень. Другий варіант, звернення до полів за їх назвами, використовує метод FieldByName.

Приклад1:

Вивести номер групи у поле редагування з таблиці Studinfo

Edit1.Text:= Studinfo.FieldByName ('Група'). As String

Приклад 2:

Заповнити 3 та 6 поля таблиці даними введеними в поля редагування Edit1 та Edit2 при натисканні кнопки Button1.

Procedure TForm1.Button1Click (Sender: TObject)

Begin

ADOTable1.First;

While not (ADOTable1.EOF) do

Begin

ADOTable1.Edit;

ADOTable1.Fields [6]. Asstring:= Edit1.Text;

ADOTable1.Fields [3]. Asstring:= Edit2.Text;

ADOTable1.Post;

ADOTable1.Next;

End;

End

 

Номер поля можна знайти у інспекторі об‘єктів – властивість Index. Нумерація полів починається з 0.

Додаткове поле можна створити використовуючи опцію New в редакторі полів. Додаткове поле може бути трьох типів: Data, Calculated або Lookup.

Data - передавання необроблених даних;

Calculated - запускає процедуру обробки полів, яку можна використати для обрахунків або інших перетворень полів;

Lookup - вміщує інформацію з іншої таблиці, пов‘язаної з даною.

Розглянемо створення обчислювального поля і програмування обчислень в таблицях БД. Обчислення для поля типу Calculated слід запрограмувати на подію OnCalcFields для об‘єкта ADOTable.

Наприклад:

Обчислити суму товару, маючи дані про його кількість і ціну. Отриманий результат занести до нового поля "Сума".

Procedure TForm1. ADOTable1CalcFields (Data Set: TDataSet);

Var

Cina : float;

Kilk : float;

Begin

Cina:= Table1.FieldByName('Ціна').AsFloat;

Kilk:= Table1.FieldByName('Кількість').AsFloat;

Table1.FieldByName('Сума').AsFloat = cina*kilk;

End;

End.

 

Питання для самоперевірки

1. Які методи переводять набір даних з одного стану до іншого?

2. Які методи забезпечують навігацію по набору даних?

3. Опишіть механізм роботи з полями набору даних в середовищі Delphi.

4. Які можливості передбачені в Delphi для створення додаткових полів в наборі даних?

5. Як забезпечуються обчислення в таблицях БД?

Лабораторна робота № 4

Тема:Організація пошуку та фільтрації даних в середовищі Delphi.

Завдання :

1. Організувати пошук запису і виведення його на форму за значенням поля введеним у об‘єкт TEdit на цій же формі.

2. Організувати фільтрацію даних.

 

Теоретичні відомості

Пошук даних

1. Для знаходження запису таблиці БД в технології ADO існує два методи

Locate та Lookup.

Function Locate (const KeyFields:string; const KeyValues:variant; Options: TLocateOptions): Boolean;

Function Lookup (const KeyFields:string; const KeyValues:variant; const ResultFields: string): Variant;

В метод Locate слід передати список полів, за якими буде відбуватися пошук (імена полів розділяються крапкою з комою) та значення цих полів, які розділяються комою. Параметри пошуку задаються в настройках. Параметр IoCaseInsensitive відключає перевірку на регістр символів, а параметр IoPartialKey підключає пошук з мінімальними відмінностями від заданих значень полів. Якщо запис знайдено, то на ньому встановлюється курсор і метод повертає значення True.

ADOTable1.Locate ('Last_Name; First_Name', VarArrayOf (['Edit1.text', 'Edit2.text']), [] );

В метод Lookup передають перелік полів для пошуку, імена яких розділяють крапкою з комою, а їх значення - комою. Якщо запис знайдено, то функція повертає масив значень полів типа Variant, назви яких вміщено в параметрі ResultFields.

ADOTable1.Lookup ('Last_Name; First_Name', VarArrayOf (['Edit1.text', 'Edit2.text']), 'Last_Name;First_Name' );

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

 

На рис. , реалізовано пошук методами “Locate та Lookup”

Програмний код:

procedure TForm4.Button2Click(Sender: TObject);

begin

if not

Datamodule2.spojivach. Locate ('ПІП;Телефон',VArArray f (['Edit2.text','Edit1.text']),[])

then ShowMessage('Запис не знайдено');

end;

procedure TForm4.Button3Click(Sender:TObject);

begin

DataModule2.spojivach.Lookup('ПІП;Телефон'VarArrayOf(['Edit1.text','Edit2.text']),

'ПІП;Телефон');

end;

 

Рис. 8 Приклад реалізації пошуку з виведенням даних у одну таблицю

 

Фільтрація даних

Якщо набір даних створено на основі компонента Table, то для відбору записів за певною умовою існує механізм фільтрації даних. Використання фільтра базується на двох основних властивостях і одній допоміжній. Текст фільтра повинен знаходитись у властивості таблиці Filter, а властивість Filtered включає або відключає фільтр, параметри фільтра задаються властивістю FilterOptions.

Фільтри можна створювати двома способами:

- За допомогою властивості Filter створюються досить прості фільтри;

- Для створення більш складних фільтрів використовується метод-обробник набору даних OnFilterRecord.

Фільтри можна розділити на статичні та динамічні. Статтичні фільтри створюються під час розробки і можуть використовувати обидва способи створення.

Динамічні фільтри можна створювати та редагувати під час виконання програми, для них використовується тільки властивість Filter. Для створення фільтра використовуються назви полів та оператори порівняння: >,<, >=, <=, =, <>, а також логфчні оператори: AND, OR, NOT.

Field1>100 AND Field2=20

Порівнювати між собою два поля неможна.

 

 

Питання для самоперевірки

1. Які засоби пошуку даних в БД закладені в Delphi ?

2. Чим відрізняється пошук за допомогою функції Locate від пошуку за допомогою функції Lookup?

3. Яким чином можна організувати пошук з мінімальними відмінностями від заданих значень полів ?

4. Яким чином можна організувати пошук не чутливий до регістру даних?

5. Які засоби фільтрації даних в БД закладені в Delphi ?

6. Якими двома способами можна організувати фільтрацію даних?

7. Як організувати фільтрацію даних у програмному режимі?

 

 

Лабораторна робота №5

Тема:Організація запитів до БД. Відображення результатів запита у клієнтському додатку.

Мета: Набути навичок створення SQL запитів за допомогою компонента ADOQuery.

Завдання:

1. Використовуючи компоненти ADOQuery, TDataSource, TDBGrid створити запит на вибірку з двох таблиць БД.

2. Створити параметричний запит на вибірку.

3. Створити параметричні запити на введення даних та вилучення даних.

 

Теоретичні положення

Об’єкт ADOQuery

Delphi поставляється з Local SQL, що дає можливість працювати з локальною БД. Delphi забезпечує підтримку “pass through SQL” (транзакт SQL), що означає можливість формувати і посилати запити серверам: Oracle, MS SQL Server , My SQL, Sybase, Interbase, тощо.

Для знайомства з локальним SQL можна використати файл LOCALSQL.HLP.

Ha відміну від ADOTable, ADOQuery дозволяє довільним чином вибирати набір даних для роботи з ними.