Macros e globais de banco de dados

As macros e os globais listados abaixo se aplicam a aplicativos de banco de dados baseados em ODBC. Eles não são usados com aplicativos baseados em DAO.

Antes do MFC 4.2, as macros AFX_SQL_ASYNC e AFX_SQL_SYNC dão as operações assíncronas a oportunidade de gerar tempo para outros processos. A partir do MFC 4.2, a implementação dessas macros foi alterada porque as classes ODBC MFC usavam apenas operações síncronas. A macro AFX_ODBC_CALL era nova no MFC 4.2.

Macros de banco de dados

Nome Descrição
AFX_ODBC_CALL Chama uma função de API ODBC que retorna SQL_STILL_EXECUTING. AFX_ODBC_CALL chamará repetidamente a função até que ela não retorne mais SQL_STILL_EXECUTING.
AFX_SQL_ASYNC Chama AFX_ODBC_CALL.
AFX_SQL_SYNC Chama uma função de API ODBC que não retorna SQL_STILL_EXECUTING.

Globais de banco de dados

Nome Descrição
Módulo AfxDbInit Adiciona suporte de banco de dados para uma DLL MFC regular que está vinculada dinamicamente ao MFC.
AfxGetHENV Recupera um identificador para o ambiente ODBC atualmente em uso pelo MFC. Você pode usar esse identificador em chamadas ODBC diretas.

Módulo AfxDbInit

Para suporte ao banco de dados do MFC (ou DAO) de uma DLL MFC regular que esteja dinamicamente vinculada ao MFC, adicione uma chamada a essa função na função CWinApp::InitInstance da DLL de MFC regular para inicializar a DLL do banco de dados de MFC.

Sintaxe

void AFXAPI AfxDbInitModule( );

Comentários

Verifique se essa chamada ocorre antes de qualquer chamada de classe base ou qualquer código adicionado que acesse a DLL do banco de dados de MFC. A DLL do banco de dados de MFC é uma DLL de extensão MFC; para que uma DLL de extensão MFC seja conectada a uma cadeia CDynLinkLibrary, ela deve criar um objeto CDynLinkLibrary no contexto de cada módulo que o usará. AfxDbInitModule cria o objeto CDynLinkLibrary no contexto da DLL de MFC regular para que ela seja conectada à cadeia de objetos CDynLinkLibrary da DLL de MFC regular.

Requisitos

Header:<afxdll_.h>

AFX_ODBC_CALL

Use essa macro para chamar qualquer função de API ODBC que possa retornar SQL_STILL_EXECUTING.

AFX_ODBC_CALL(SQLFunc)

Parâmetros

SQLFunc
Uma funções API de ODBC. Para obter mais informações, confira a função de API ODBC no SDK do Windows.

Comentários

AFX_ODBC_CALL chamará repetidamente a função até que ela não retorne mais SQL_STILL_EXECUTING.

Antes de invocar AFX_ODBC_CALL, você deve declarar uma variável nRetCode, do tipo RETCODE.

Observe que as classes ODBC MFC agora usam apenas processamento síncrono. Para executar uma operação assíncrona, faça uma chamada para a função da API ODBC SQLSetConnectOption. Para obter mais informações, consulte o tópico "Executando funções de forma assíncrona" no SDK do Windows.

Exemplo

Este exemplo usa AFX_ODBC_CALL para chamar a função de API ODBC SQLColumns, que retorna uma lista das colunas na tabela nomeada por strTableName. Observe a declaração nRetCode e o uso de membros de dados do conjunto de registros para passar parâmetros para a função. O exemplo também ilustra a verificação dos resultados da chamada com Check, uma função membro da classe CRecordset. A variável prs é um ponteiro para um objeto CRecordset, declarado em outro lugar.

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"));
}

Requisitos

Cabeçalho: afxdb.h

AFX_SQL_ASYNC

A implementação dessa macro foi alterada no MFC 4.2.

AFX_SQL_ASYNC(prs, SQLFunc)

Parâmetros

Prs
Um ponteiro para um CRecordset objeto ou um CDatabase objeto. A partir do MFC 4.2, esse valor de parâmetro é ignorado.

SQLFunc
Uma funções API de ODBC. Para obter mais informações, confira a função de API ODBC no SDK do Windows.

Comentários

AFX_SQL_ASYNC simplesmente chama a macro AFX_ODBC_CALL e ignora o parâmetro prs. Em versões do MFC anteriores à 4.2, AFX_SQL_ASYNC era usado para chamar funções de API ODBC que poderiam retornar SQL_STILL_EXECUTING. Se uma função de API ODBC retornasse SQL_STILL_EXECUTING, então AFX_SQL_ASYNC chamaria prs->OnWaitForDataSource.

Observação

As classes ODBC MFC agora usam apenas processamento síncrono. Para executar uma operação assíncrona, faça uma chamada para a função da API ODBC SQLSetConnectOption. Para obter mais informações, consulte o tópico "Executando funções de forma assíncrona" no SDK do Windows.

Requisitos

Cabeçalho afxdb.h

AFX_SQL_SYNC

A macro AFX_SQL_SYNC simplesmente chama a função SQLFunc.

AFX_SQL_SYNC(SQLFunc)

Parâmetros

SQLFunc
Uma funções API de ODBC. Confira o SDK do Windows para obter mais informações sobre essas funções.

Comentários

Use essa macro para chamar funções de API ODBC que não retornarão SQL_STILL_EXECUTING.

Antes de chamar AFX_SQL_SYNC, você deve declarar uma variável nRetCode, do tipo RETCODE. Você pode verificar o valor de nRetCode após a chamada de macro.

Observe que a implementação da AFX_SQL_SYNC alterou no MFC 4.2. Como a verificação do status do servidor não era mais necessária, AFX_SQL_SYNC simplesmente atribui um valor a nRetCode. Por exemplo, em vez de fazer a chamada

AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue));

você pode simplesmente fazer a atribuição

nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
   &nValue, sizeof(nValue), &cbValue);

Requisitos

Cabeçalho afxdb.h

AfxGetHENV

Você pode usar o identificador retornado em chamadas ODBC diretas, mas não deve fechar o identificador ou assumir que o identificador ainda é válido e disponível depois que qualquer objeto existente CDatabase ou CRecordset derivado tiver sido destruído.

HENV AFXAPI AfxGetHENV();

Valor de retorno

O identificador para o ambiente ODBC atualmente em uso pelo MFC. Pode ser SQL_HENV_NULL se não houver objetos CDatabase e nenhum objeto CRecordset em uso.

Requisitos

Cabeçalho afxdb.h

Confira também

Macros e Globais