Я хочу зробити це сам! БД в CBuilder

У мене дві маленькі доньки, і вони часто заявляють, що хочуть зробити що-небудь самі, незважаючи на те, що мені здається, що у них це не вийде І що ж – я постійно не вгадує, і вони справляються краще, ніж впорався б я сам Мені здається, такий вже доля батьків Фірма Borland зіткнулася з такою ж проблемою, коли її програмісти стали писати обєкти VCL для роботи з базами даних Багато програмістів нагадують моїх дочок у своєму небажанні допустити, щоб VCL робила всю роботу по зміні, записи і видаленню в базах даних за допомогою обєкта DBNavigator Вони вважають за краще самі проробити всю роботу по перезапису бази даних при додаванні, зміни чи видалення CBuilder дозволяє вам робити власноруч все, що ви самі забажаєте

На рис 75 показана форма, яку ми будемо використовувати в нашому наступному прикладі Вона зроблена за образом і подобою форми, яку згенерував Майстер форм баз даних CBuilder Головна відмінність полягає в додаванні в нижню частину форми наших власних кнопок переміщення по базі даних і видаленні з форми компонента DBNavigator Крім цього, у даному прикладі ми, звичайно, не збираємося знову відображати на формі панель стану

Втілення цієї форми досить просто Редаговані поля все також привязані до джерела даних (data source), який, у свою чергу, привязаний до компонента dataset (таблиці) Сама ж таблиця вказує на наш файл бази даних адрес Тому єдине, для чого потрібне спеціальне рішення,-це додані нами кнопки переміщення по базі Давайте займемося всіма ними одночасно

Ми хочемо, щоб користувач починав роботу з нашим редактором бази адрес з порожньою форми, тому при запуску програми нам треба додавати порожню запис для редагування Додайте обробник для події форми FormCreate, В який додайте наступний рядок:

void __fastcall TForm1::FormCreate(TObject *Sender)

{

/ / Додаємо новий запис у базу

Table1-&gtAppend()

}

Рис 75 Форма редактора баз даних

Метод Append обєкта TTable додасть нову порожню запис в кінець бази даних, що переведе базу в режим редагування і дозволить користувачу додати новий запис Коли введення даних в запис закінчено, користувач повинен натиснути кнопку Додавання для додавання цього запису в базу даних і створення нової Давайте подивимося на обробник для кнопки Додавання

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (Table1-&gtState == dsInsert || Table1-&gtState == dsEdit) Table1-&gtPost()

Table1-&gtAppend()

}

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

відміну від деяких інших компонентних систем, не довіряє макросу ASSERT і не зупиняє програму), але й не буде вести себе так, як ви від неї очікуєте Тому ми перевіряємо режим, в якому знаходиться база даних, досліджуючи, відповідно, властивість State (Стан, тут – режим) Якщо поточним є режим редагування або додавання, ми дозволяємо виконання Post, В іншому випадку ми ігноруємо поточні зміни в записі

Кнопка Видалення діє абсолютно прямолінійно Ось код, обробляю щий натискання кнопки Вилучення:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Table1-&gtDelete

}

У даному прикладі немає необхідності не дозволяти користувачеві видаляти записи, тому ми не робимо жодних спроб обмежити його в цьому У ваших серйозних додатках ви, швидше за все, захочете перевірити його рішення, використовуючи для цього вікно діалогу («Ви впевнені, що хочете видалити цей запис» з кнопками Так і Ні), але зараз ми не будемо цього робити Зверніть увагу, що в цьому прикладі нам не треба хвилюватися за виклик методу Abort, Оскільки ми контролюємо тільки операції з даними, а не саму базу

Кнопки переміщення по базі вперед (>) і назад (<) також не складні. Вони лише перевіряють, чи не перебуваємо ми в кінці або на початку бази даних відповідно. Якщо не вірно ні те ні інше, ми переміщаємося у вказаному напрямку до наступного запису. Ось обробники для кнопок:

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if (Table-&gtBof) Table1-&gtPrior()

}

//————————————————————————————

void __fastcall TForm1::Button4Click(TObject *Sender)

{

if (Table-&gtEof) Table1-&gtNext

}

Зверніть увагу на використання властивостей бази даних Bof (Beginning of File, початок файлу) і

Eof (End of File, кінець файлу) для перевірки, чи зможемо ми виконати прохання користувача

На цьому написання прикладу закінчено Я думаю, ви переконалися, наскільки просто можна працювати з базами даних на тому рівні доступу, на якому ви хочете Ви навіть можете прибрати поля DBEdit і замінити їх звичайними полями редагує вання (Edit) Якщо ви вирішите так зробити, вам треба буде присвоювати значення полях за допомогою властивостей FieldValues бази даних, наприклад:

Table1-> Fields [LASTNAME] = Іванов;

Цей рядок встановить значення поля з прізвищами (LASTNAME) в Іванов (не так уже й рідко зустрічається значення) Це все, що робить компонент DBEdit Аналогічно, щоб встановити поле редагування рівним значенню поля бази даних, вам треба написати:

Edit1-&gtText = Table1-&gtFields[&quotLASTNAME&quot]

Ось, власне, і все з редагуванням баз даних Тепер давайте звернемося до проблеми перегляду даних у повному обсязі

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

*

*