| ODBCによるAccessデータベースへのアクセス |
|
- Microsoft Accessのデータベース(*.mdb)にアクセスするなら前節のOLEで接続可能ですから、
特にODBCを使用しなくてもいいようですが、ODBCを使用すると、コードを変更することなく、
Windows用のMySQLにもアクセスできます。
OLE接続とODBC接続では、使用するモジュールが違う為、作成するインターフェースも違ってきます。
Accessだけでなく、他のデータベースも操作する必要が有る場合は、ODBCを1つ覚えるだけで、
全てのデータベースにアクセス可能なインターフェースを作成可能です。
Accessオンリーで、VBやVCでクライアントソフトを作成する場合はOLEで、
オールマイティなサーバソフトを作成するならODBCと使い分けてはいかがでしょう。
ODBCもVBやVCからアクセスできますが、直接Jetエンジンを操作するOLEとは格段の速度低下になります。
- ODBCの準備
Accessのデータベースをシステムに認識させる為、名前をつけ、データベース(.mdb)を関連付ける必要が有ります。
Windows2000/Xpでは、コントロールパネルの「管理ツール」を開きます。
このフォルダの「データソース(ODBC)」を選択してください。
[システム DSN]タブの[追加]を押します。
- ドライバー一覧が表示されますので、「Microsoft Access Driver (*.mdb)」を選択し、[完了]を押します。
- 「データソース名」を設定します。
perlからのアクセスはこの名称を指定します。ここでは仮に「FindZip」にでもしておきましょう。
UNIXやLinuxとの共有時に文字コードなど、変換の問題が起こりかねませんので、半角英数字にしておきましょう。
ここで設定したデータソース名に関連付けるデータベースを選択する為、[選択]ボタンを押します。
このサンプルでは全国の郵便番号が格納されている「zip.mdb」を選択しています。
- ファイル選択ダイアログからAccessのデータベース(*.mdb)を選択します。
ネットワーク上のディスクからでも構いませんが、ドライブ番号を設定しておく必要があります。
[ネットワーク]ボタンを押して、同時にドライブ番号を設定する事もできます。
- これで、ODBCの設定は完了です。
[OK]ボタンでODBC設定ダイアログを閉じます。
|
| Perl ODBCモジュールのインストール |
|
- 極端に古いActivePerlでない限り、ODBCモジュールは標準でインストールされていますので、
改めてインストールする必要はありません。
#!/user/local/bin/perl
use Win32::ODBC;
print "Content-type: text/plain\n\n";
exit;
|
|
これだけのコードのCGIを実行してエラーが出力されなけばODBCはインストール済みと言うことになります。
- エラーの出力された方はODBCをインストールします。
[スタート]メニューの「ファイル名を指定して実行」で、
とタイプしてDOSシェルを起動します。
C:\> ppm
PPM interractive shell (2.2.0) - type 'help' for available command
PPM> search ODBC
PPM> install Win32::ODBC
Install package 'Win32::ODBC?' (y/N): y
|
search ODBC で検索し、Win32::ODBC が表示されれば、
install Win32:ODBC でインストールしてください。
これでデータベースへのアクセスの準備は完了です。
あとは実際にインターフェースを作成してアクセスするだけです。
|
| Access(*.mdb)に接続インターフェースの作成 |
|
- ODBCドライバ「FindZip」に関連つけられたAccessのデータベースzip.mdbのデータを表示します。
#!/usr/local/bin/perl
# ODBCモジュールを読込む
use Win32::ODBC;
print "Content-type: text/html\n\n";
print "<html>"
print "<body>"
# 設定したDSN名「FindZip」を指定してオブジェクトを作成
$db= new Win32::ODBC("DSN=FindZip");
# 既存のクエリーQueryZipから高知県を郵便番号順に
$db->Sql("SELECT * FROM QueryZip WHERE pre = 39 ORDER BY code");
# 取得したレコードセットの数だけループして表示
while ( $db->FetchRow() ){
undef %FIELDS;
# 各フィールドのデータをハッシュに格納
%FIELDS= $db->DataHash();
print "$FIELDS{'code'} $FIELDS{'name'}$FIELD{'citys'}<BR>\n";
}
# データベースを閉じる
$db->Close( );
print "</body></html>";
exit;
|
|
|