Відстежуємо зміни БД в CBuilder

Тепер, коли панель стану знаходиться на формі, треба відстежити індивідуальні зміни, зроблені користувачем в записах бази даних Для того щоб щось відстежити, нам треба дещо дізнатися про те, коли і які події відбуваються в «життя» записи

Коли користувач натискає кнопку + обєкта TDBNavigator, Расположенно го на формі, новий запис додається до бази даних Зміна існуючої запису відбувається, коли користувач переходить до якої-небудь записи, використовуючи одну з кнопок переміщення обєкта TDBNavigator, і змінює її перед тим, як перезаписати в базу В обох випадках подія, яка виникає в базі даних, називається Post (Прописування) Подія Post виникає щоразу, коли запис пишеться в базу даних, незалежно від того, в перший раз або після зміни

Якщо подивитися на список подій, можливих для обєкта-таблиці, асоційованого з формою, то в ньому не знайдеться різних подій для оновлення і додавання запису Замість цього є події AfterInsert (Після додавання) іAfterPost  (Після запису) Подія AfterInsert виникає після того, як після натискання користувачем кнопки Insert (+) новий запис додається в базу Ми не можемо визначити, чи викликається Post в результаті додавання нової

або оновлення існуючої записи, тому ми будемо відстежувати попереднє дію- додавання або переміщення базі Для цього ми додамо в нашу форму прапор стану Заодно давайте додамо лічильники кількості додавань, змін і вилучень за поточний сеанс роботи програми

Змініть заголовний файл форми, додавши в опис форми нові змінні, як показано нижче Заодно зверніть увагу на змінні, вже додані туди майстром форм Чимало роботи він за вас виконав, чи не так

private // private declarations int FnNumAdds

int FnNumUpdates

int FnNumDeletes bool FbUpdateMode

void UpdateStatusBar(void)

Не дивуйтеся, що тут же знаходиться функція UpdateStatusBar (Оновити панель стану),

– Ми збираємося використовувати її для перенесення нових даних в блоки панелі стану форми

Наступним кроком буде ініціалізація всіх змінних в конструкторі форми Всі лічильники, природно, встановлюються в 0, але прапор режиму (FbUpdateMode) встановлено у значення false Чому Коли ви спочатку відкриєте форму, CBuilder додасть новий запис для введення даних Якщо користувач переміститься до якої-небудь іншого запису і змінить її, ми це все одно відстежимо Ось повний код для конструктора:

__fastcall TForm2::TForm2(TComponent *Owner)

: TForm(Owner)

{

FnNumAdds = 0

FnNumUpdates = 0

FnNumDeletes = 0 FbUpdateMode = false

}

Після того як всі значення ініціалізовані, ми додамо алгоритм для логічної функції оновлення панелі стану Ось код, в якому ми просто присвоюємо кожній секції (panel) панелі стану нові дані по відображуваної їй інформації:

void  TForm2::UpdateStatusBar(void)

{

StatusBar1-&gtPanels-&gtItems[0]-&gtText  =

“Додано записів: + AnsiString (FnNumAdds) StatusBar1-> Panels-> Items [1] -> Text =

“Вилучено записів: + AnsiString (FnNumDeletes) StatusBar1-> Panels-> Items [2] -> Text =

“Змінено записів: + AnsiString (FnNumUpdates)

}

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

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

Щоб обробити факт того, що сталося подію Post (А це все, що нам треба зробити), додайте обробник події AfterPost (По факту записи) обєкта TTable У цей обробник додайте наступний код:

void __fastcall TForm2::Table1AfterPost(TDataSet *DataSet)

{

if (FbUpdateMode) FnNumUpdates++ else FnNumAdds++ UpdateStatusBar()

}

Якщо користувач додає новий запис в базу даних, обєктом TTable генерується подія AfterInsert (По факту вставки) Між іншим, для кожної події After (По факту, після) є відповідна подія Before (Перед, до) Таким чином, якби ви захотіли обробити події BeforeInsert або BeforePost (До якого ми незабаром звернемося), ви могли б додати обробники і для них

Додайте наступний код в обробник події AfterInsert, Щоб відстежити факт додавання нового запису в базу:

void __fastcall TForm2::Table1AfterInsert(TDataSet *DataSet)

{

FbUpdateMode = false

}

Тут ми робимо не так і багато – нам треба тільки запамятати, що остання дія, яке вчинив користувач, – додав новий запис Точно так само, якщо користувач змінює існуючу запис, відбувається подія AfterEdit Ми можемо використовувати цю подію для того, щоб дати знати формі, що ми знаходимося в режимі редагування А ось і надзвичайної складності код для обробника події AfterEdit:

void __fastcall TForm2::Table1AfterEdit(TDataSet *DataSet)

{

FbUpdateMode = true

}

І остання подія, яке нам треба відловити, – це подія, що виникає, коли користувач видаляє запис з бази даних Сподіваюся, вам не здасться дивним, що ця подія AfterDelete (По факту видалення) Також, думаю, наступний код для обробника події AfterDelete вас теж не здивує:

void __fastcall TForm2::Table1AfterDelete(TDataSet *DataSet)

{

FnNumDeletes ++ UpdateStatusBar()

}

Зверніть увагу, що при видаленні ми оновлюємо панель стану Це тому, що в базі даних більше немає змін, повязаних з видаленням, які можна було б відстежити Видаливши одного разу, ви видаляєте назавжди, і з цим вам доведеться рахуватися У разі додавання або оновлення, однак, ніяких дій насправді не буде проводитися до тих пір, поки користувач не зафіксує зміни в базі, що викличе подія Post Тому нам треба відстежити подія Post і відповідним чином оновити панель стану Ось код для обробника події AfterPost:

void __fastcall TForm2::Table1AfterPost(TDataSet *DataSet)

{

if (FbUpdateMode) FnNumUpdates++ else FnNumAdds++ UpdateStatusBar

}

От і все, що стосується оновлення панелі стану Тепер ви можете додавати, змінювати і видаляти записи скільки душі завгодно, спостерігаючи на панелі стану кількість змін, які ви внесли в базу даних

Джерело: Теллес М – 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>

*

*