Void CDBView::OnRecordDelete() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Void CDBView::OnRecordDelete()



{

m_pSet->Delete();

m_pSet->MoveNext();

if (m_pSet->lsEOF())

m_pSet->MoveLast();

if (m_pSet->lsBOF())

m_pSet->SetFieldNulI(NULL);

UpdateData(FALSE);

}

Ми модифікували додаток, і тепер воно здатне виконувати додавання і видалення записів, так само як і їх оновлення. Відкомпілюйте додаток і запустіть його на виконання, вибравши в меню Visual Studio команду Builds Execute або натиснувши клавіші <Ctrl+F5>. Коли додаток почне роботу, на екрані розкриється його головне вікно, зовнішній вигляд якого не зазнав ніяких змін у порівнянні з попередньою версією додатка. Однак тепер у вас з'явилася можливість додати в базу даних новий запис, клацнувши на піктограмі додавання запису на панелі інструментів (або вибравши команду Record \ Add Record), або видалити поточну запис з бази, клацнувши на піктограмі видалення запису на панелі інструментів (або вибравши команду Record \ Delete Record).

Після клацання на піктограмі додавання запису додаток відображає в екранній формі порожню запис. Заповніть поля нового запису. При переході до іншого запису програма автоматично внесе новий запис в базу даних.

Для того щоб запис видалити, просто клацніть на піктограмі видалення. Поточна запис (та, яка відображена на екрані) зникне, і на екран буде виведена наступна запис бази даних.

Аналіз функції OnRecordAdd (). Ймовірно, вам буде цікаво дізнатися, як працюють підпрограми на C + +, додані в додаток. Функція OnRecordAdd () починає свою роботу з виклику методу AddNew () класу CDBSet, похідного від класу CRecordset. Викликана функція формує порожню запис, призначену для заповнення користувачем. Однак цей запис не з'явиться на екрані до тих пір, поки не буде викликаний метод UpdateData () класу уявлення. Але перш ніж здійснити виклик цього методу, необхідно проробити підготовчі дії.

Після того, як користувач створить новий запис, необхідно буде оновити базу даних. Установка в даній підпрограмі певного прапорця дозволить підпрограмі переcилкі визначити, яке саме дія користувача має місце: переміщення до наступного запису бази даних від існуючої раніше записи бази або ж від знов доданої. Саме з цією метою змінної m_bAdding присвоюється значення TRUE.

В даний момент, коли користувачеві надається можливість ввести новий запис, необхідно змінити статус поля коду службовця UserID, зазвичай має атрибут "тільки читання". Для зняття цього атрибута програмі, перш за все, необхідно за допомогою функції GetDIgItem () отримати покажчик на відповідний елемент управління, а потім викликати метод SetReadOnly () для присвоєння значення FALSE атрибуту "тільки читання" цього елементу управління.

Тепер все готово до виклику функції UpdateData () для відображення на екрані нової порожньої записи.

Аналіз функції OnMove (). Тепер, коли порожній запис виведена на екран, користувачеві не складе великої праці заповнити поля введення необхідними даними. Для того щоб нова запис дійсно була поміщена в базу даних, користувачеві необхідно виконати перехід до іншого запису бази. При цьому буде викликаний метод OnMove () класу уявлення. Зазвичай функція OnMove () не виконує нічого, крім відображення наступного запису бази даних. Зроблене нами перевизначення цієї функції додатково забезпечить і збереження нового запису.

При виклику функція OnMove () насамперед перевіряє значення логічної змінної m_bAdding і таким чином з'ясовує, від якої запису відбувається перехід: від існуючої або від знов доданої. Якщо значення m_bAdding одно FALSE, то основне тіло оператора IF пропускається і виконується фрагмент програми, наступний за ELSE. При цьому програма викликає метод OnMove базового класу (CRecordView), який виконує звичайний перехід на наступний запис.

Якщо змінна m_bAdding має значення TRUE, виконується основне тіло оператора IF. Тут програма, перш за все скидає прапор m_bAdding, а потім викликає функцію UpdateData () для передачі даних з полів вікна подання в буфер обраних записів. Виклик функції CanUpdate () класу вибірки даних визначає, чи можна оновлювати джерело даних, і, якщо можна, виклик функції Update (), яка є членом цього ж класу, додає новий запис до джерела даних.

Для формування нової вибірки даних програма повинна викликати функцію Requery (), яка є членом класу CRecordset, а потім викликом методу класу вікна подання UpdateData () помістити нові дані в елементи керування цього вікна. І нарешті, програма відновлює для поля коду службовця UserID атрибут "тільки читання", ще раз викликавши функції GetDIgItem () і SetReadOnIy ().

Аналіз функції OnRecordDeIete (). Видалення запису виконується досить просто. Функція OnRecordDe lete () викликає функцію Delete (), яка є членом класу вибірки даних. Після виконання видалення виклик методу MoveNext () класу вибірки даних дозволяє організувати перехід до відображення наступної записи таблиці. Однак тут може виникнути проблема, якщо видаляється запис була у таблиці останньої або ж єдиною. Виклик методу IsEOF () класу CRecordset дозволяє з'ясувати, чи досягнуто кінець послідовності записів. Якщо ця функція повертає TRUE, то покажчик запису потрібно помістити на останній запис в поточній вибірці. Для цього використовується метод класу вибірки даних MoveLast.

Коли всі записи з поточної вибірки даних будуть видалені, покажчик поточного запису буде знаходитися на початку вибірки. Програма повинна перевірити наявність такої ситуації за допомогою виклику методу IsBOF () класу CRecordset. Якщо ця функція повертає значення TRUE, то програма встановлює значення полів поточного запису рівними NULL.

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



Поделиться:


Последнее изменение этой страницы: 2016-12-12; просмотров: 139; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.63.87 (0.006 с.)