|
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でも既存のクエリーを使用していなければ、何も変更する箇所は有りません。
|
|
|
|