Перевірка даних БД в CBuilder

Якби ми жили в ідеальному світі, ми б просто дозволили користувачам змінювати дані, як їм заманеться, і надати CBuilder виконувати всю іншу роботу Якщо ви знаєте, де знаходиться ідеальний світ, розкажіть і мені – я теж хочу там побувати У цьому ж світі, на жаль, питання перевірки цілісності даних (data integrity) в базі неминуче піднімається при будь-якому обговоренні додатків, що працюють з базами даних

Цілісність даних означає, що дані у вашій базі коректні і представлені в коректному форматі У нашому прикладі, наприклад, не можна дозволити користувачеві вводити букви або знаки пунктуації в поле ZIP-коду (Поштового індексу) Незважаючи на те що поле ZIP-коду зберігається у вигляді рядка символів, насправді воно являє собою число З цієї причини ми повинні мати можливість перевірити значення, що вводиться в поле ZIP-коду на допустимість Інші поля в ваших базах даних можуть вимагати і інших, спеціальних перевірок

До цих пір в наших обговореннях подій в базах даних ми зупинялися лише на тих змінах, які відбуваються, коли користувач щось робить з базою даних Однак з точки зору перевірки даних пізно що-небудь з ними робити, коли запис вже внесена в базу даних Ця інформація потрібна нам до того, як запис опиниться на диску Для цього служать події Beforexxx (Де на місці xxx – Insert, Delete або Post)

Подія Post виникає, коли відбувається зміна записи бази даних Підсистема роботи з базами даних CBuilder згенерує подія BeforePost до того, як запис буде внесена в базу даних Тут вам і надається шанс перевірити введені дані перед тим, як дозволити подальше проходження процесу Якщо проблем не виникло, ви просто дозволяєте продовження процесу з його обробкою за замовчуванням (яка складається у фізичному занесенні записи назад в файл бази даних) З іншого боку, якщо проблеми з обробкою даних в

записи все ж таки виникли, вам треба зупинити процес, не давши йому здійснитися до кінця, а для цього треба скористатися методом Abort (Перервати) Ось код, який треба ввести в обробник події BeforePost:

void __fastcall TForm2::Table1BeforePost(TDataSet *DataSet)

{

/ / Спочатку перевіримо, введено Чи має значення ZIP-коду if (Table1ZIPCODE-> TextIsEmpty ())

{

MessageBox (NULL, Необхідно ввести ZIP-код”, Помилка, MB_OK)

Abort() return

}

/ / Засвідчує, що для ZIP-коду введено

/ / Числове значення

std::string s = Table1ZIPCODE-&gtTextc_str() for (int i=0 i&ltssize() ++i)

{

if (isdigit(s[i]))

{

MessageBox(NULL,

“ZIP-код повинен мати числове значення”, Помилка, MB_OK)

Abort()

return

}

}

/ / Все в порядку, дозволяємо подальше проходження

/ / Процесу занесення запису в базу даних

}

В якості примітки скажу, що для того, щоб скомпілювати наведений вище код, вам треба включити &ltstringh&gt в початок вашого вихідного файлу, щоб отримати визначення класу string STL

Для кожної події обробник BeforePost перевіряє кожен символ ZIP-коду та засвідчується, що це цифра Якщо ж ні, або якщо поле ZIP-коду порожньо, користувачеві повідомляється про досконалої їм помилку і викликається метод Abort

Тепер скомпілюйте і запустіть додаток Якщо ви не зробили занадто багато помилок при наборі тексту прикладу, ви повинні побачити нашу форму редагування бази даних Введіть послідовність ABCDEF в полі введення ZIP-коду і клацніть на кнопці записи, щоб відобразити зміну в базі даних Ви побачите вікно повідомлення з попередженням про те, що поле ZIP-коду має бути числовим Після цього CBuilder відкриє вікно діалогу, що повідомляє, що сталося щось жахливе У чому ж тут справа

Відповідь полягає в тому, що CBuilder автоматично генерує виняткову ситуацію (exception), коли ви викликаєте метод Abort Це не означає, що виняткова ситуація не обробляється, в чому ви можете переконатися, повідомивши, що бажаєте продовжити роботу програми Вся справа в тому, що ви веліли програмі зупинятися в разі виникнення виняткових ситуацій Ви не памятаєте, щоб робили таке Ну, по правді кажучи, ви цього й не робили CBuilder

встановлює цей прапор за замовчуванням Якщо вас це не влаштовує, як не влаштовує більшість програмістів, ви можете його змінити Виберіть команду меню Options | Environment і погляньте на область Debugging на першій сторінці властивостей Зніміть прапорець Break on exception (останов при виняткової ситуації) і знову запустіть програму Вона більше не видаватиме лякають повідомлень про виняткових ситуаціях, а буде працювати так, як ви від неї очікували

Перевірка будь-яких інших полів на відповідність даних може бути здійснена тим же шляхом Перевірка при видаленні (перевірка відповідних записів тощо) може проводитися в абсолютно аналогічному обробнику події BeforeDelete

На цьому приклад на обробку подій закінчено, і я сподіваюся, що ви тепер знаєте трохи більше про те, як система обробки повідомлень і система підтримки баз даних співіснують в середовищі CBuilder

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*