Макросы и глобальные объекты баз данных
Макросы и глобальные объекты, перечисленные ниже, применяются к приложениям баз данных на основе ODBC. Они не используются с приложениями на основе DAO.
До MFC 4.2 макросы AFX_SQL_ASYNC
и AFX_SQL_SYNC
дали асинхронные операции возможность дать время другим процессам. Начиная с MFC 4.2 реализация этих макросов изменилась, так как классы ODBC MFC использовали только синхронные операции. Макрос AFX_ODBC_CALL
был новым для MFC 4.2.
Макросы базы данных
Имя | Описание |
---|---|
AFX_ODBC_CALL | Вызывает функцию API ODBC, которая возвращает SQL_STILL_EXECUTING . AFX_ODBC_CALL повторно вызывает функцию до тех пор, пока она больше не возвращается SQL_STILL_EXECUTING . |
AFX_SQL_ASYNC | Вызывает AFX_ODBC_CALL . |
AFX_SQL_SYNC | Вызывает функцию API ODBC, которая не возвращается SQL_STILL_EXECUTING . |
Глобальные базы данных
Имя | Описание |
---|---|
AfxDbInitModule | Добавляет поддержку базы данных для обычной библиотеки DLL MFC, которая динамически связана с MFC. |
AfxGetHENV | Извлекает дескриптор в среду ODBC, используемую MFC. Этот дескриптор можно использовать в прямых вызовах ODBC. |
AfxDbInitModule
Для поддержки базы данных MFC (или DAO) из обычной библиотеки DLL MFC, которая динамически связана с MFC, добавьте вызов этой функции в функцию обычной библиотеки DLL CWinApp::InitInstance
MFC для инициализации библиотеки DLL базы данных MFC.
Синтаксис
void AFXAPI AfxDbInitModule( );
Замечания
Убедитесь, что этот вызов возникает перед любым вызовом базового класса или любым добавленным кодом, который обращается к библиотеке DLL базы данных MFC. Библиотека DLL базы данных MFC — это библиотека DLL расширения MFC; Чтобы библиотека DLL расширения MFC была подключена к CDynLinkLibrary
цепочке, она должна создать CDynLinkLibrary
объект в контексте каждого модуля, который будет использовать его. AfxDbInitModule
CDynLinkLibrary
создает объект в контексте обычной библиотеки DLL MFC, чтобы он был подключен к цепочке CDynLinkLibrary
объектов обычной библиотеки DLL MFC.
Требования
Заголовок:<afxdll_.h>
AFX_ODBC_CALL
Используйте этот макрос для вызова любой функции API ODBC, которая может возвращать SQL_STILL_EXECUTING
.
AFX_ODBC_CALL(SQLFunc)
Параметры
SQLFunc
Функция API ODBC. Дополнительные сведения о функциях API ODBC см. в пакете SDK для Windows.
Замечания
AFX_ODBC_CALL
повторно вызывает функцию до тех пор, пока она больше не возвращается SQL_STILL_EXECUTING
.
Перед вызовом AFX_ODBC_CALL
необходимо объявить переменную типа nRetCode
RETCODE.
Обратите внимание, что классы ODBC MFC теперь используют только синхронную обработку. Чтобы выполнить асинхронную операцию, необходимо вызвать функцию SQLSetConnectOption
API ODBC. Дополнительные сведения см. в разделе "Выполнение функций асинхронно" в пакете SDK для Windows.
Пример
В этом примере используется AFX_ODBC_CALL
для вызова SQLColumns
функции API ODBC, которая возвращает список столбцов в таблице с strTableName
именем. Обратите внимание на объявление nRetCode
и использование элементов данных набора записей для передачи параметров функции. В примере также показана проверка результатов вызова с Check
помощью функции-члена класса CRecordset
. Переменная prs
— это указатель на CRecordset
объект, объявленный в другом месте.
RETCODE nRetCode;
AFX_ODBC_CALL(::SQLColumns(prs->m_hstmt, (SQLTCHAR*)NULL, SQL_NTS, (SQLTCHAR*)NULL,
SQL_NTS, (SQLTCHAR*)strTableName.GetBuffer(), SQL_NTS, (SQLTCHAR*)NULL, SQL_NTS));
if (!prs->Check(nRetCode))
{
AfxThrowDBException(nRetCode, prs->m_pDatabase, prs->m_hstmt);
TRACE(_T("SQLColumns failed\n"));
}
Требования
Заголовок: afxdb.h
AFX_SQL_ASYNC
Реализация этого макроса изменилась в MFC 4.2.
AFX_SQL_ASYNC(prs, SQLFunc)
Параметры
prs
Указатель на CRecordset
объект или CDatabase
объект. Начиная с MFC 4.2, это значение параметра игнорируется.
SQLFunc
Функция API ODBC. Дополнительные сведения о функциях API ODBC см. в пакете SDK для Windows.
Замечания
AFX_SQL_ASYNC
просто вызывает макрос AFX_ODBC_CALL и игнорирует параметр prs . В версиях MFC до 4.2 использовался для вызова функций API ODBC, AFX_SQL_ASYNC
которые могут возвращать SQL_STILL_EXECUTING
. Если функция API ODBC была возвращена SQL_STILL_EXECUTING
, вызовет AFX_SQL_ASYNC
prs->OnWaitForDataSource
.
Примечание.
Классы ODBC MFC теперь используют только синхронную обработку. Чтобы выполнить асинхронную операцию, необходимо вызвать функцию SQLSetConnectOption
API ODBC. Дополнительные сведения см. в разделе "Выполнение функций асинхронно" в пакете SDK для Windows.
Требования
Заголовок afxdb.h
AFX_SQL_SYNC
Макрос AFX_SQL_SYNC
просто вызывает функцию SQLFunc
.
AFX_SQL_SYNC(SQLFunc)
Параметры
SQLFunc
Функция API ODBC. Дополнительные сведения об этих функциях см. в пакете SDK для Windows.
Замечания
Используйте этот макрос для вызова функций API ODBC, которые не возвращаются SQL_STILL_EXECUTING
.
Перед вызовом AFX_SQL_SYNC
необходимо объявить переменную типа nRetCode
RETCODE. Можно проверить значение nRetCode
после вызова макроса.
Обратите внимание, что реализация изменена AFX_SQL_SYNC
в MFC 4.2. Так как проверка состояния сервера больше не требуется, AFX_SQL_SYNC
просто назначает значение nRetCode
. Например, вместо вызова
AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue));
Вы можете просто сделать назначение
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
Требования
Заголовок afxdb.h
AfxGetHENV
Возвращаемый дескриптор можно использовать в прямых вызовах ODBC, но не следует закрывать дескриптор или предполагать, что дескриптор по-прежнему действителен и доступен после уничтожения CDatabase
существующих объектов или CRecordset
производных объектов.
HENV AFXAPI AfxGetHENV();
Возвращаемое значение
Дескриптор среды ODBC в настоящее время используется MFC. Может бытьSQL_HENV_NULL
, если нет объектов CDatabase и не используется объектов CRecordset.
Требования
Заголовок afxdb.h