Makra i funkcje globalne bazy danych
Makra i globalne wymienione poniżej dotyczą aplikacji baz danych opartych na odBC. Nie są one używane z aplikacjami opartymi na dao.
Przed MFC 4.2 makra AFX_SQL_ASYNC
i AFX_SQL_SYNC
dały operacjom asynchronicznym możliwość uzyskania czasu na inne procesy. Począwszy od MFC 4.2, implementacja tych makr zmieniła się, ponieważ klasy MFC ODBC używały tylko operacji synchronicznych. Makro AFX_ODBC_CALL
było nowe dla MFC 4.2.
Makra bazy danych
Nazwa/nazwisko | opis |
---|---|
AFX_ODBC_CALL | Wywołuje funkcję interfejsu API ODBC, która zwraca wartość SQL_STILL_EXECUTING . AFX_ODBC_CALL funkcja będzie wielokrotnie wywoływana, dopóki nie zwróci SQL_STILL_EXECUTING już funkcji . |
AFX_SQL_ASYNC | Wywołuje AFX_ODBC_CALL . |
AFX_SQL_SYNC | Wywołuje funkcję interfejsu API ODBC, która nie zwraca SQL_STILL_EXECUTING elementu . |
Globalne bazy danych
Nazwa/nazwisko | opis |
---|---|
AfxDbInitModule | Dodaje obsługę bazy danych dla regularnej biblioteki MFC DLL, która jest dynamicznie połączona z MFC. |
AfxGetHENV | Pobiera uchwyt do środowiska ODBC aktualnie używanego przez MFC. Tego uchwytu można używać w bezpośrednich wywołaniach ODBC. |
AfxDbInitModule
W przypadku obsługi bazy danych MFC (lub DAO) z regularnej biblioteki MFC DLL, która jest dynamicznie połączona z MFC, dodaj wywołanie tej funkcji w funkcji biblioteki MFC DLL CWinApp::InitInstance
, aby zainicjować bibliotekę DLL bazy danych MFC.
Składnia
void AFXAPI AfxDbInitModule( );
Uwagi
Upewnij się, że to wywołanie ma miejsce przed wywołaniem klasy bazowej lub dodanym kodem, który uzyskuje dostęp do biblioteki DLL bazy danych MFC. Biblioteka DLL bazy danych MFC jest biblioteką DLL rozszerzenia MFC; aby biblioteka DLL rozszerzenia MFC była podłączana do CDynLinkLibrary
łańcucha, musi utworzyć obiekt w kontekście każdego modułu, który będzie go używać CDynLinkLibrary
. AfxDbInitModule
program CDynLinkLibrary
tworzy obiekt w kontekście zwykłego biblioteki MFC DLL, dzięki czemu jest podłączony do CDynLinkLibrary
łańcucha obiektów regularnej biblioteki MFC DLL.
Wymagania
Header:<afxdll_.h>
AFX_ODBC_CALL
Użyj tego makra, aby wywołać dowolną funkcję interfejsu API ODBC, która może zwrócić SQL_STILL_EXECUTING
wartość .
AFX_ODBC_CALL(SQLFunc)
Parametry
SQLFunc
Funkcja interfejsu API ODBC. Aby uzyskać więcej informacji na temat funkcji interfejsu API ODBC, zobacz zestaw Windows SDK.
Uwagi
AFX_ODBC_CALL
wielokrotnie wywołuje funkcję, dopóki nie zwróci SQL_STILL_EXECUTING
już funkcji .
Przed wywołaniem AFX_ODBC_CALL
metody należy zadeklarować zmienną , nRetCode
typu RETCODE.
Należy pamiętać, że klasy MFC ODBC używają teraz tylko przetwarzania synchronicznego. Aby wykonać operację asynchroniczną, należy wywołać funkcję SQLSetConnectOption
interfejsu API ODBC . Aby uzyskać więcej informacji, zobacz temat "Wykonywanie funkcji asynchronicznie" w zestawie WINDOWS SDK.
Przykład
W tym przykładzie użyto AFX_ODBC_CALL
metody do wywołania funkcji interfejsu SQLColumns
API ODBC, która zwraca listę kolumn w tabeli o nazwie .strTableName
Zanotuj deklarację nRetCode
i użycie elementów członkowskich danych zestawu rekordów w celu przekazania parametrów do funkcji. W przykładzie pokazano również sprawdzanie wyników wywołania za pomocą Check
funkcji składowej klasy CRecordset
. Zmienna prs
jest wskaźnikiem do obiektu zadeklarowanego CRecordset
gdzie indziej.
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"));
}
Wymagania
Nagłówek: afxdb.h
AFX_SQL_ASYNC
Implementacja tego makra zmieniła się w MFC 4.2.
AFX_SQL_ASYNC(prs, SQLFunc)
Parametry
Prs
Wskaźnik do CRecordset
obiektu lub CDatabase
obiektu. Począwszy od MFC 4.2, ta wartość parametru jest ignorowana.
SQLFunc
Funkcja interfejsu API ODBC. Aby uzyskać więcej informacji na temat funkcji interfejsu API ODBC, zobacz zestaw Windows SDK.
Uwagi
AFX_SQL_ASYNC
po prostu wywołuje makro AFX_ODBC_CALL i ignoruje parametr prs . W wersjach MFC wcześniejszych niż 4.2 użyto funkcji interfejsu API ODBC, AFX_SQL_ASYNC
które mogą zwrócić wartość SQL_STILL_EXECUTING
. Jeśli funkcja interfejsu API ODBC zwróciła wartość SQL_STILL_EXECUTING
, AFX_SQL_ASYNC
wywoła prs->OnWaitForDataSource
element .
Uwaga
Klasy MFC ODBC używają teraz tylko przetwarzania synchronicznego. Aby wykonać operację asynchroniczną, należy wywołać funkcję SQLSetConnectOption
interfejsu API ODBC . Aby uzyskać więcej informacji, zobacz temat "Wykonywanie funkcji asynchronicznie" w zestawie WINDOWS SDK.
Wymagania
Nagłówek afxdb.h
AFX_SQL_SYNC
Makro AFX_SQL_SYNC
po prostu wywołuje funkcję SQLFunc
.
AFX_SQL_SYNC(SQLFunc)
Parametry
SQLFunc
Funkcja interfejsu API ODBC. Aby uzyskać więcej informacji na temat tych funkcji, zobacz Zestaw Windows SDK.
Uwagi
Użyj tego makra, aby wywołać funkcje interfejsu API ODBC, które nie będą zwracać SQL_STILL_EXECUTING
wartości .
Przed wywołaniem AFX_SQL_SYNC
metody należy zadeklarować zmienną , nRetCode
typu RETCODE. Wartość można sprawdzić nRetCode
po wywołaniu makra.
Należy pamiętać, że implementacja zmieniona AFX_SQL_SYNC
w MFC 4.2. Ponieważ sprawdzanie stanu serwera nie było już wymagane, AFX_SQL_SYNC
po prostu przypisuje wartość do nRetCode
. Na przykład zamiast wykonywania wywołania
AFX_SQL_SYNC(::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue));
Możesz po prostu wykonać przypisanie
nRetCode = ::SQLGetInfo(m_dbCust.m_hdbc, SQL_ODBC_SQL_CONFORMANCE,
&nValue, sizeof(nValue), &cbValue);
Wymagania
Nagłówek afxdb.h
AfxGetHENV
Można użyć zwróconego uchwytu w bezpośrednich wywołaniach ODBC, ale nie można zamknąć uchwytu lub założyć, że uchwyt jest nadal prawidłowy i dostępny po usunięciu istniejących CDatabase
obiektów - lub CRecordset
-pochodnych.
HENV AFXAPI AfxGetHENV();
Wartość zwracana
Dojście do środowiska ODBC jest obecnie używane przez MFC. Może to być SQL_HENV_NULL
, jeśli nie ma obiektów CDatabase i nie są używane obiekty CRecordset .
Wymagania
Nagłówek afxdb.h