ActivePerl For Windows ODBC to MySQL
 
TryThe Homepage
初めてのCGI
CGI 研究室
ダイナミックCGI
ダウンロード
サービス
サーバ構築(Windows)
データベースアクセス
 Webmin(UNIX/Linux)
 MySQL(UNIX/Linux)
 Windows用 MySQL
 MySQLコントロールセンタ
 Access(*.mdb)に接続
 ODBCによる操作
 ODBCによるMySQL操作
 SQL ステートメント
有料サービス
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