トップ

ODBC経由でデータベースと接続するには


PerlからODBC経由でデータベースと接続するには、DBI:ODBCモジュールとWin32::ODBCモジュール(Windows環境のみ)を 利用する方法がありますが、今回、Win32::ODBCモジュールを利用したサンプルスクリプトを作ってみました。
Perl初級者が初級者の方を対象に作成していますので、誤表記等がありましたらご了承ください。
ODBCドライバは、Microsoft Officeシリーズ等に付属していますが、手元にない場合はMicrosoftのサイト http://www.microsoft.com/japan/msdn/data/download.asp から入手できます。
Win32::ODBCモジュールは、最近のActivePerl for Win32では標準でインストールされていますが、 インストールされてない場合は、http://www.roth.net/perl/odbc/から入手できます。

■サンプルスクリプトの実行例
 ・イメージをクリックすると原寸表示します。(ちょっと見にくいですね...)⇒

■サンプルスクリプト
 ・odbc.cgi
  1〜16行目を動作環境に合わせて、変更してください。
 ・実行する場合は、同じフォルダへ jcode.pl を設置してください。

■動作確認したサーバー環境
 ・Windows2000 Pro/Windows98SE
 ・Apache HTTP Server 1.3.27
 ・ActivePerl for MSWin32-x86-multi-thread v5.6.1 build 633

■動作確認したクライアント環境
 ・Windows98SE
 ・Internet Explorer 5.5 SP2
 ・Jscript 5.6.0.6626

■Win32::ODBCモジュールの使用例
 ここでは、Win32::ODBCモジュールについて、サンプルスクリプトの中で使用しているメソッドのみを簡単に解説しています。
 詳細を知りたい方は、日本語訳を公開されている河馬屋二千年堂さんのページ 日本語チョウ訳シリーズ を参照されることをお勧めします。

use Win32::ODBC;
ODBCモジュールをロードします。

if(!($OBJ = new Win32::ODBC($dsn))) {
 print Win32::ODBC::Error();
 exit;
}
ODBC接続のオブジェクトを生成します。$dsnには、ODBC接続に必要なデータソース名、ユーザー名、パスワードを記述します。成功すると 'Win32::ODBC=HASH(0x17751c0)'のようなハンドラを 返し、失敗すると'undef'を返します。失敗した場合は、Win32::ODBC::Error()でエラー内容を取得することができます。
以後は生成したオブジェクトに対するメソッドを実行し、データベースへアクセスすることができます。

@tablename = $OBJ->TableList;
現在の接続で利用可能なテーブル名を配列で返します。

%type = $OBJ->ColAttributes(SQL_COLUMN_TYPE_NAME);
各フィールドの属性を連想配列で返します。この場合はデータ型名を返します。 各フィールドの属性は、$type{'フィールド名'}で参照できます。

$OBJ->Sql("$sql");
SQLコマンドを実行します。失敗するとエラー番号を返すので、if($OBJ->Sql("$sql")) {$msg = $OBJ->Error(); ...}とすると エラー内容を取得することができます。配列で受けとる場合は、(ERROR_NUMBER, ERROR_TEXT, CONNECTION_NUMBER)が返され、 スカラーで受けとる場合は、"ERROR_NUMBER CONNECTION_NUMBER ERROR_TEXT"が返されます。

@fn = $OBJ->FieldNames();
フィールド名を配列で返します。

while($OBJ->FetchRow()) {
 %data = $OBJ->DataHash();
 ...
 ...
}
$OBJ->FetchRow()はキーセットから次のレコードを取り出します。次のレコードがあれば'true'、 なければ'false'を返します。
%data = $OBJ->DataHash()はレコード全体の内容を連想配列で返します。
各フィールドの内容は、$data{'フィールド名'}で参照できます。また、Dataメソッドを使い、 $OBJ->Data('フィールド')でも参照できます。

$OBJ->Close();
生成したオブジェクトを閉じます。

©Kitaoka