Поделиться через


Макросы и глобальные объекты баз данных

Макросы и глобальные объекты, перечисленные ниже, применяются к приложениям баз данных на основе 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 объект в контексте каждого модуля, который будет использовать его. AfxDbInitModuleCDynLinkLibrary создает объект в контексте обычной библиотеки 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необходимо объявить переменную типа nRetCodeRETCODE.

Обратите внимание, что классы ODBC MFC теперь используют только синхронную обработку. Чтобы выполнить асинхронную операцию, необходимо вызвать функцию SQLSetConnectOptionAPI 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 теперь используют только синхронную обработку. Чтобы выполнить асинхронную операцию, необходимо вызвать функцию SQLSetConnectOptionAPI 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необходимо объявить переменную типа nRetCodeRETCODE. Можно проверить значение 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

См. также

Макросы и глобальные