ActivePerl For Windows ODBC to MySQL
 
TryThe Homepage
初めてのCGI
CGI 研究室
ダイナミックCGI
ダウンロード
サービス
サーバ構築(Windows)
データベースアクセス
有料サービス
FAQ
お問い合わせ
このページを印刷
ODBC によるMySQLの操作
ここまでにMySQLへのアクセス、Microsoft Accessデータベースへのアクセスは学習しました。 さらに、ODBCでMySQLのデータベースにアクセスする必要が有るのでしょうか?
もちろん、単独でデータベースを操作するのであれば、ここまでの学習で十分です。 ただ、ODBCでMySQLにアクセスできれば、ODBCでAccessにアクセスした全く同じコードで MySQLのデータベースにもアクセスする事が可能になります。 何より、ODBCを使えば、MySQLのデータベースにVBやVCでアクセス可能になりますので、 高いパフォーマンスを持ったMySQLのデータベースを使用したクライアントソフトが開発できます。

たとえば、携帯電話からの予約情報をPerlでMySQLに保存し、VBで開発した予約管理のクライアントで リアルタイムに確認できます。こうすれば、オペレータが電話予約と、インターネット予約を重複して 受付ける事も防ぐ事ができます。
  MySQL ODBCドライバーのインストール
最新版は、日本語ミラーサイト Soft Agency からダウンロードできます。ダウンロードファイルは、インストーラ付きEXEとMSIが有りますので、 Windows2000/Xp以上であれば軽量なMSIで結構です。 ダウンロードしたEXEまたは、MSIを実行するだけでインストールは完了です。
  ODBCにMySQLを関連付ける
Microsoft AccessにODBCでアクセスすると同様に、MySQLのデータベースをODBCに登録する必要があります。
  • ODBCの準備
    Accessのデータベースをシステムに認識させる為、名前をつけ、データベース(.mdb)を関連付ける必要が有ります。
    Windows2000/Xpでは、コントロールパネルの「管理ツール」を開きます。
    このフォルダの「データソース(ODBC)」を選択してください。

    [システム DSN]タブの[追加]を押します。

  • ドライバー一覧が表示されますので、「MySQL ODBC 3.51 Driver」を選択し、[完了]を押します。


  • MySQL 専用のダイアログが表示されますので、各項目を設定します。

    データソース名は重複しない名前に自由に設定できます。 AccessのデータベースのODBCアクセスに「FindZip」を使用していますので、今回は「MySQLzip」にしておきましょう。
    ホスト名は自分自身ですので、「localhost」で結構です。
    データベース名は先程作成した「zip」です。
    ユーザ名はMySQLに登録されているユーザ「root」にしておきます。
    データベースにパスワードを設定している場合は、設定したパスワードを指定します。
    [OK]を押してダイアログを閉じてください。

  • これで、ODBCの設定は完了です。

    [OK]ボタンでODBC設定ダイアログを閉じます。
  Perl からODBCでMySQLにアクセス
ODBCドライバーを介してデータベースにアクセスするのですから、 データベースの違いはODBCのドライバーが吸収しますので、Accessでも、MySQLでも その他のSQLデータベースでも互換性が有り、全く同じです。

試しに、AccessにODBCでアクセスしたCGIのODBCデータソース名を「MySQLzip」に変更して実行してみてください。 これだけで、Accessのデータベースではなく、MySQLのデータベースからデータを収集しています。

もちろん、Accessのデータベースの構造がMySQLで作成したデータベースと同じでなければなりません。
MySQLには、Accessのように、あらかじめリレーションを設定し、クエリーを作成して置く事ができませんので、 抽出するSELECT文は変更しなければなりません。
#!/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=MySQLzip");
# 高知県を郵便番号順に
# 取得したテーブルにリレーションで都道府県名を追加している
$db->Sql("SELECT iptable.*,pretable.name FROM iptable LEFT JOIN pretable ON iptable.pre=pretable.pre WHERE iptable.pre = 39 ORDER BY iptable.code;");
# 取得したレコードセットの数だけループして表示
while ( $db->FetchRow() ){
  undef %FIELDS;
  # 各フィールドのデータをハッシュに格納
  %FIELDS= $db->DataHash();
  print "$FIELDS{'code'} $FIELDS{'name'}$FIELD{'citys'}<BR>\n";
}
# データベースを閉じる
$db->Close( );
print "</body></html>";
exit;
もちろん、Accessでも既存のクエリーを使用していなければ、何も変更する箇所は有りません。
Copyright 2004 Terra. All rights reserved. No reproduction or republication without written