Udostępnij za pośrednictwem


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_EXECUTINGjuż funkcji .
AFX_SQL_ASYNC Wywołuje AFX_ODBC_CALL.
AFX_SQL_SYNC Wywołuje funkcję interfejsu API ODBC, która nie zwraca SQL_STILL_EXECUTINGelementu .

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_EXECUTINGwartość .

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_EXECUTINGjuż funkcji .

Przed wywołaniem AFX_ODBC_CALLmetody należy zadeklarować zmienną , nRetCodetypu RETCODE.

Należy pamiętać, że klasy MFC ODBC używają teraz tylko przetwarzania synchronicznego. Aby wykonać operację asynchroniczną, należy wywołać funkcję SQLSetConnectOptioninterfejsu 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ą Checkfunkcji 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->OnWaitForDataSourceelement .

Uwaga

Klasy MFC ODBC używają teraz tylko przetwarzania synchronicznego. Aby wykonać operację asynchroniczną, należy wywołać funkcję SQLSetConnectOptioninterfejsu 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_EXECUTINGwartości .

Przed wywołaniem AFX_SQL_SYNCmetody należy zadeklarować zmienną , nRetCodetypu 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 CDatabaseobiektó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

Zobacz też

Makra i globalne