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