пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Анализ текстов, созданных АррWizard для класса, производного от CRecordSet. (Функции DoFieldExchange(), GetDefaultConnect(), GetDefaultSQL() и др.).

 

Переопределяемые методы

В эту категорию входят восемь функций, которые можно переопределить в каждом конкретном приложении, чтобы настроить его на выполнение текущих задач. Мы рассмотрим только некоторые из них.

 

virtual  void CRecordset::   DoFieldExchange (CFieldExchange*  pFX)

 

Вызывается для организации обмена данными между полями результирующего набора и соответствующими столбцами текущей записи в источнике данных.

В качестве параметра функция принимает указатель на объект CFieldExchange, который авт-ески создается и передается библиотекой MFC.

Примечание   Эти функции  доступны только в том случае, если для результирующего набора используется класс, производный от CRecordset. Если же  применяется непосредственно класс CRecordset, то для получения данных необходимо вызывать функцию GetFieldValue.

Собственно обмен данными осуществляется с помощью механизма RFX (Record Field Exchange, Обмен полями записи), который работает в обоих направления от полей данных результирующего набора к записям источника данных и наоборот. Ниже приведен фрагмент, демонстрирующий переопределение функции DoFieIdExchange.

 

void CDBSet::DoFildExchange(CFieldExchange*  pFX)

зн //знзнAFX__FIELD__MAP(CDBSet)

       pFX->SetFieldType(CFieldExchange::outputColumn);

     RFX_Text(pFX,    _T("(ProductName]"),   m_ProductName);

        RFX_Long (pFX,        _T (" [CategoryID] "),,   m__CategoryID) ;

       RFX_Text(pFX,        _T("[QuantityPerUnit]''),   m__QuantityPerUnit);

        RFX_Text(pFX,         _T("[UnitPrice]"),   m_UnitPrice);       
//знзн AFX_FIELD_MAP зн

 

Примечание

Мастер CiassWizard не поддерживает обмен полями блочных записей, и необходимо переопределить соответствующую функцию вручную, реализовав в ней вызовы функций BulkRFX (блочный обмен полями записи).

 

virtual CString CRecordset::GetDefaultConnect   ( )

 

Библиотека MFC вызывает данную функцию, чтобы получить строку, содержащую источник данных, на котором базируется результирующий нa6op. Ниже приведен фрагмент кода, подробно рассматриваемый в следующей главе и иллюстрирующий  использование этой функции.

 

        CString CDBSet::GetDefaultConnect()

зн         return _T("ODBC;DSN=MS Access   97  Database"); зн

virtual   CString  CRecordset::GetDefaultSQL   ( )

 

Библиотека MFC вызывает эту функцию, чтобы получить строку, содержащую оператор SQL, на котором базируется результирующий набор. Это должно быть или имя таблицы, или непосредственно оператор SELECT. Можно также определить здесь вызов предопределенного запроса, используя оператор CALL. Ниже приведен фрагмент кода, который иллюстрирует использование этой функции.

 

CString  CDBSet::GetDefaultSQL( )

                                                                 зн           return _Tзн"[Products]");зн

 

Если библиотека MFC не сможет найти имя таблицы или корректно интерпретировать оператор CALL, функция возвращает пустую строку.

Примечание

Между  круглой   скобкой   и   ключевым   словом,   например,   CALL   или SELECT, не должно быть пробелов.

Рассмотренные классы, безусловно, существенно облегчают работу с результирующими наборами, однако без предоставления этой информации пользователю, да еще в удобном виде, она мало что значит. К счастью, в библиотеке  MFC реализовано множество классов представления (view), которые сделают эту paботу  достаточно простой.

 

CWnd

          CView

                    CScrollView

                              CFormView

                                        CRecordView


18.01.2020; 22:32
хиты: 48
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь