Для вывода на экран значений полей записи необходимо реализовать функцию копирования значений из экземпляра класса хранения данных в переменные представления. Эта функция должна прежде всего получить указатель на экземпляр класса хранения данных от документа.
Затем функция проверяет состояние каждого поля записи в экземпляре класса хранения данных и, если значение готово для копирования, копирует его. После того как все значения скопированы, следует вызвать метод UpdateData для вывода значений на экран в управляющие элементы формы. Чтобы добавить эту возможность в приложение выполните следующее :
Вверх
Листинг 13.6 Функция RefreshBoundData
// Get a pointer to the document object
// Is the field OK
// Is the field OK
// Is the field OK
// Sync the data with the controls
Анализ:
Для вывода на экран значений полей записи необходимо реализовать
функцию копирования значений из экземпляра класса хранения данных
в переменные представления.
Вверх
Копирование измененных значений в запись - обратный процесс, при котором
значения из управляющих элементов копируются в переменные экземпляра
класса хранения данных. Для этого можно использовать подход, при котором
копируются значения всех полей, не зависимо от того изменялись ли они.
Можно применить и другой подход - сравнивать два значения и таким
способом определять те значения, которые изменились. Это позволит производить
копирование только в случае фактического изменения значений.
Функцию,
осуществляющую эти действия желательно вызвать до перемещения по набору
записей - чтобы изменения, внесенные пользователем в поля записи, сохранялись
в БД до того, как пользователь сможет изменить значения полей другой записи.
С целью добавить эту возможность в создаваемое приложение, выполните
следующее:
Вверх
Листинг 13.7 Функция UpdateBoundData
// Has the field changed? If so, copy the value back
// Has the field changed? If so, copy the value back
// Has the field changed? If so, copy the value back
Анализ:
Копирование измененных значений в запись - обратный процесс, при котором
значения из управляющих элементов копируются в переменные экземпляра
класса хранения данных.
Назад |
Начало урока |
Вверх |
Вперед
void CAdoDatabaseView::RefreshBoundData(void)
{
pRs = GetDocument()->GetRecSet();
if (adFldOK == pRs->lFirstNameStatus)
m_strFirstName = pRs->m_szFirstName;
m_strFirstName = _T("");
if (adFldOK == pRs->lLastNameStatus)
m_strLastName = pRs->m_szLastName;
m_strLastName = _T("");
if (adFldOK == pRs->lAddressStatus)
m_strAddress = pRs->m_szAddress;
m_strAddress = _T("");
UpdateData(FALSE);
CCustomRs* pRs;
// Получить указатель на документ
pRs = GetDocument()->GetRecSet();
// Поле готово для копирования?
if (adFldOK == pRs->lFirstNameStatus)
m_strFirstName = pRs->m_szFirstName;
m_strFirstName = _T("");
. . .
// Обновить экран
UpdateData(FALSE);
Сохранение изменений
Функция UpdateBoundData
void CAdoDatabaseView::UpdateBoundData(void)
{
// Get a pointer to the document
pRs = GetDocument()->GetRecSet();
// Sync the controls with the variables
UpdateData(TRUE);
if (m_strFirstName != pRs->m_szFirstName)
strcpy(pRs->m_szFirstName, (LPCTSTR)m_strFirstName);
if (m_strLastName != pRs->m_szLastName)
strcpy(pRs->m_szLastName, (LPCTSTR)m_strLastName);
if (m_strAddress != pRs->m_szAddress)
strcpy(pRs->m_szAddress, (LPCTSTR)m_strAddress);
CCustomRs* pRs;
// Получить указатель на документ
pRs = GetDocument()->GetRecSet();
// Синхронизация
UpdateData(TRUE);
// Поле изменилось?Если да то сопировать значение в переменную
if (m_strFirstName != pRs->m_szFirstName)
strcpy(pRs->m_szFirstName, (LPCTSTR)m_strFirstName);
. . .
Содержание