MFCとデータベース - データベースの接続

提供:MochiuWiki : SUSE, EC, PCB
2021年11月15日 (月) 03:44時点におけるWiki (トーク | 投稿記録)による版 (文字列「<source lang」を「<syntaxhighlight lang」に置換)
ナビゲーションに移動 検索に移動

概要

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>