カテゴリ:MFC

提供:MochiuWiki : SUSE, EC, PCB
2019年7月8日 (月) 18:32時点における192.168.1.23による版
ナビゲーションに移動 検索に移動

概要

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を使用
 #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;
 }


  • Oracle Databaseを使用
 #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;
 }


  • MySQLを使用
 #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;
 }


  • Jet Databaseを使用
 #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;
 }


  • Ace Databaseを使用
 #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;
 }