MFCとデータベース - データベースの接続
ナビゲーションに移動
検索に移動
概要
ODBC(Open Database Connectivity)は、Microsoft社が提唱したDBMS接続用のAPI仕様である。
DBMSの差異はODBCドライバによって吸収される為、ODBCの手順に従ってプログラムを作成すれば、基本的な差異を意識せずプログラムすることができる。
MFC ODBCクラスは、Visual C++のODBCクラスライブラリである。
ODBCドライバ | ファイル |
---|---|
Microsoft Access Driver (*.mdb) | ODBCJT32.DLL |
Microsoft Text Driver (*.txt; *.csv) | ODBCJT32.DLL |
Microsoft Excel Driver (*.xls) | ODBCJT32.DLL |
Microsoft dBase Driver (*.dbf) | ODBCJT32.DLL |
Microsoft ODBC for Oracle | MSORCL32.DLL |
Microsoft Paradox Driver (*.db ) | ODBCJT32.DLL |
SQL Server | SQLSRV32.DLL |
Microsoft Access Driver (*.mdb, *.accdb) | ACEODBC.DLL |
SQL Server Native Client 10.0 | SQLNCLI10.DLL |
サンプルコード
- SQL Serverを使用
<syntaxhighlight lang="cpp"> #include <afx.h> #include <afxdb.h> int _tmain( int argc, TCHAR* argv[] ) { CDatabase db; CString strCon = _T("Driver={SQL Server};SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd"); CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message"); db.OpenEx( strCon ); CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, strSQL ); CString strMessage; while( !rs.IsEOF() ) { rs.GetFieldValue( (short)0, strMessage ); _tprintf( _T("%sn"), (LPCTSTR)strMessage ); rs.MoveNext(); } rs.Close(); db.Close(); return 0; } </source>
- Oracle Databaseを使用
<syntaxhighlight lang="cpp"> #include <afx.h> #include <afxdb.h> int _tmain( int argc, TCHAR* argv[] ) { CDatabase db; CString strCon = _T("Driver={Microsoft ODBC for Oracle};SERVER=ORCL;UID=scott;PWD=tiger"); CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message FROM DUAL"); db.OpenEx( strCon ); CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, strSQL ); CString strMessage; while( !rs.IsEOF() ) { rs.GetFieldValue( (short)0, strMessage ); _tprintf( _T("%sn"), (LPCTSTR)strMessage ); rs.MoveNext(); } rs.Close(); db.Close(); return 0; } </source>
- MySQLを使用
<syntaxhighlight lang="cpp"> #include <afx.h> #include <afxdb.h> int _tmain( int argc, TCHAR* argv[] ) { CDatabase db; CString strCon = _T("Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"); CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message"); db.OpenEx( strCon ); CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, strSQL ); CString strMessage; while( !rs.IsEOF() ) { rs.GetFieldValue( (short)0, strMessage ); _tprintf( _T("%sn"), (LPCTSTR)strMessage ); rs.MoveNext(); } rs.Close(); db.Close(); return 0; } </source>
- Jet Databaseを使用
<syntaxhighlight lang="cpp"> #include <afx.h> #include <afxdb.h> int _tmain( int argc, TCHAR* argv[] ) { CDatabase db; CString strCon = _T("Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"); CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message"); db.OpenEx( strCon ); CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, strSQL ); CString strMessage; while( !rs.IsEOF() ) { rs.GetFieldValue( (short)0, strMessage ); _tprintf( _T("%sn"), (LPCTSTR)strMessage ); rs.MoveNext(); } rs.Close(); db.Close(); return 0; } </source>
- Ace Databaseを使用
<syntaxhighlight lang="cpp"> #include <afx.h> #include <afxdb.h> int _tmain( int argc, TCHAR* argv[] ) { CDatabase db; CString strCon = _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb"); CString strSQL = _T("SELECT 'Hello, ODBC World!' AS Message"); db.OpenEx( strCon ); CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, strSQL ); CString strMessage; while( !rs.IsEOF() ) { rs.GetFieldValue( (short)0, strMessage ); _tprintf( _T("%sn"), (LPCTSTR)strMessage ); rs.MoveNext(); } rs.Close(); db.Close(); return 0; } </source>