データ ソース : プログラムにおける ODBC データ ソースの設定
更新 : 2007 年 11 月
このトピックでは、ODBC (Open Database Connectivity) データ ソース名をプログラムで設定する方法について説明します。この方法を使うと、柔軟なデータ アクセスが可能になり、ユーザーが ODBC データ ソース アドミニストレータなどのプログラムを使って明示的にデータ ソースを指定する必要もありません。
通常、ユーザーは ODBC データ ソース アドミニストレータを実行してデータ ソースを作成します。ただし、関連付けられたデータベース管理システム (DBMS: Database Management System) がこの操作をサポートすることが条件です。
ODBC データ ソース アドミニストレータを使用して Microsoft Access ODBC データ ソースを作成する際には、既存の .mdb ファイルを使用するか、新しい .mdb ファイルを作成するかを選択できます。MFC ODBC アプリケーションからプログラムを通じて .mdb ファイルを作成する方法はありません。したがって、データを Microsoft Access データ ソース (.mdb ファイル) に格納する必要があるアプリケーションの場合は、空の .mdb ファイルを用意し、必要に応じて使用またはコピーできるようにします。
しかし、多くの DBMS では、プログラム上でデータ ソースを作成できます。一部のデータ ソースは、データベースのフォルダ仕様を保持しています。つまり、フォルダがデータ ソースであり、データ ソース内の各テーブルは別個のファイルに格納されます。たとえば、dBASE の場合、各テーブルは .dbf ファイルです。Microsoft Access や SQL サーバーなどのほかの ODBC データベースのドライバは、データ ソースを確立する前に特定の基準を満たすことが必要です。たとえば、SQL Server ODBC ドライバを使用する場合は、SQL Server コンピュータを確立しておく必要があります。
SQLConfigDataSource の例
次の例では、::SQLConfigDataSource ODBC API 関数を使用して、New Excel Data Source という新しい Excel データ ソースを作成します。
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
"DSN=New Excel Data Source\0"
"Description=New Excel Data Source\0"
"FileType=Excel\0"
"DataDirectory=C:\\EXCELDIR\0"
"MaxScanRows=20\0");
このデータ ソースは、実際はフォルダ (C:\EXCELDIR) です。このフォルダは存在している必要があります。Excel ドライバは、フォルダをそのデータ ソースとして使用し、ファイルを各テーブル (.xls ファイルごとに 1 テーブル) として使用するからです。
テーブルの作成の詳細については、「データ ソース : プログラムにおける ODBC データ ソースのテーブルの作成」を参照してください。
次に、::SQLConfigDataSource ODBC API 関数に渡す必要のあるパラメータについて説明します。::SQLConfigDataSource を使用するには、Odbcinst.h ヘッダー ファイルをインクルードし、Odbcinst.lib インポート ライブラリを使用する必要があります。また、実行時には、パスに Odbccp32.dll (16 ビットの場合は Odbcinst.dll) を指定する必要があります。
ODBC データ ソース名は、ODBC データ ソース アドミニストレータなどのユーティリティを使用して作成できます。しかし、アプリケーションから直接データ ソース名を作成し、ユーザーが別のユーティリティを実行しなくてもアクセスできるようにする方が望ましい場合もあります。
通常、ODBC データ ソース アドミニストレータは、コントロール パネルにインストールされます。ODBC データ ソース アドミニストレータは、Windows レジストリ (16 ビットの場合は Odbc.ini ファイル) にエントリを追加することによって、新しいデータ ソースを作成します。ODBC ドライバ マネージャは、このファイルを問い合わせてデータ ソースに関する必要な情報を取得します。レジストリに追加する情報は、::SQLConfigDataSource を呼び出して指定するため、確認しておく必要があります。
この情報は、::SQLConfigDataSource を使わずにレジストリに直接書き込むこともできます。しかし、これを直接書き込むアプリケーションは、ODBC ドライバ マネージャがデータを保持するために現在使用している手法に依存しています。新しいバージョンの ODBC ドライバ マネージャでデータ ソースのレコードを保持する方法に変更があると、この手法を使うアプリケーションは動作しなくなります。API 関数が提供されている場合はできるだけそれを使うようにしてください。たとえば、::SQLConfigDataSource 関数を使用すると、Odbc.ini ファイルまたはレジストリへの書き込みが正しく行われるため、そのコードは 16 ビットから 32 ビットへ移植できます。
SQLConfigDataSource のパラメータ
ここでは ::SQLConfigDataSource 関数のパラメータについて説明します。説明する内容の大半は、Visual C++ バージョン 1.5 以降で提供されている『ODBC API Programmer's Reference』に収められています。
関数プロトタイプ
BOOL SQLConfigDataSource(HWND hwndParent,UINT fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
解説
パラメータとその使い方
hwndParent
新しいデータ ソースに関する追加情報をユーザーから得るために ODBC ドライバ マネージャまたは特定の ODBC ドライバが作成するダイアログ ボックスのオーナーとして指定するウィンドウ。lpszAttributes パラメータの提供する情報が不十分な場合は、ダイアログ ボックスが表示されます。hwndParent パラメータが NULL である場合もあります。lpszDriver
ドライバの名前。ユーザーに示す名前であり、物理ドライバ名 (DLL) ではありません。lpszAttributes
"キー名=値" 形式で指定する属性リスト。各文字列は NULL ターミネータで区切ります。属性リストの最後には NULL ターミネータを 2 つ続けます。これらの属性は、主として既定のドライバ固有のエントリであり、新しいデータ ソースのレジストリに入ります。『ODBC API Reference』には説明されていないこの関数の重要なエントリとして、"DSN (data source name)" があります。DSN では、新しいデータ ソースの名前を指定します。残りのエントリは、新しいデータ ソースのドライバ固有のエントリです。エントリをすべて指定する必要はありません。ドライバは、ダイアログ ボックスを表示してユーザーに新しい値を指定させることができるからです。ユーザーに新しい値の指定を要求する場合は、hwndParent に NULL を設定します。ユーザーに値の指定を要求しないときは、明示的に既定値を提供します。
ODBC データ ソース アドミニストレータを使用して lpszDriver パラメータのドライバ名を指定するには
ODBC データ ソース アドミニストレータを実行します。
[追加] をクリックします。
これにより、インストールされているドライバとその記述の一覧が表示されます。この記述を lpszDriver パラメータとして使います。なお、その際には記述全体を使います。たとえば、"Excel Files (*.xls)" という記述の場合は、ファイル拡張子とかっこも含めます。
別の方法として、レジストリ (16 ビットの場合は Odbcinst.ini ファイル) でレジストリ キー "ODBC Drivers" (Odbcinst.ini の場合は [ODBC Drivers] セクション) の下のすべてのドライバ エントリと記述の一覧を調べることもできます。
lpszAttributes パラメータのキー名と値を検索する 1 つの方法として、既に設定されているデータ ソース (通常は ODBC データ ソース アドミニストレータで設定したデータ ソース) の Odbc.ini ファイルを調べることもできます。
lpszAttributes パラメータのキー名と値を探すには
Windows レジストリ エディタを実行します (16 ビットの場合は Odbc.ini ファイルを開きます)。
次のいずれかの方法を使用して ODBC データ ソース情報を検索します。
32 ビットの場合は、左ペインで HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources キーを検索します。
右側のペインには、"pub: REG_SZ:<data source name>" という形式のエントリが一覧表示されます。<data source name> は、使用するドライバに対して必要な設定が既に行われているデータ ソースを示します。必要なデータ ソース (SQL サーバーなど) を選択します。文字列 "pub:" の後に続くのは、lpszAttributes パラメータで使う順のキー名と値です。
16 ビットの場合は、Odbc.ini ファイル内で [<data source name>] というセクションを検索します。
この行の後には、"キー名=値" という形式の行が続きます。これらの行が、lpszAttributes パラメータで使うエントリです。
使用する特定のドライバに関するドキュメントを調べるには、ドライバのオンライン ヘルプを参照してください。ドライバのオンライン ヘルプにアクセスするには、ODBC データ ソース アドミニストレータを実行します。通常、これらのヘルプ ファイルは、Windows NT、Windows 3.1、または Windows 95 の WINDOWS\SYSTEM ディレクトリにあります。
ODBC ドライバのオンライン ヘルプを参照するには
ODBC データ ソース アドミニストレータを実行します。
[追加] をクリックします。
ドライバ名を選択します。
[OK] をクリックします。
選択したドライバの新しいデータ ソースを作成するための情報が表示されたら、[ヘルプ] をクリックします。このドライバのヘルプ ファイルが開き、通常は、ドライバの使い方に関する重要な情報が表示されます。
詳細については、『Installer DLL Function Reference』を参照してください。