ドキュメント |
![]() |
| ▲ [ オピニオン|テクニカル ] [ Home ] ▼ [ 概要|Index ] |
|
C++Builder6 + dbExpress + MySQL5 (1) |
|
C++Builder には DB 接続のための方法が複数あるが、dbExpress は BDE に比べ、DB ベンダの提供するライブラリを直接叩くためパフォーマンスがよく、DB 固有の機能を利用することができ、BDE を再配布する必要がない──という点で有利である。
しかしながら、C++Builder6 Professional 版に添付されている MySQL 用 dbExpress ドライバは MySQL 3.23.x 向けであり、そのままでは MySQL5.0.x に接続できない。(未確認だが BDS2006 には MySQL 4.1.x 向けドライバが添付されているようだ。)そこでここでは C++Builder6 Pro で dbExpress による MySQL5 への接続方法について解説する。(ちなみにここで用いた MySQL バージョンは 5.0.19 である。)
# これは C++Builder6 Enterprise 版でも同様のはずである。
# しかし、Personal 版には dbExpress が付属しないので利用できない。
まず、dbExpress を用いた場合における DB アクセスの流れを示すと以下のようになる。ここでいう MySQL ドライバが DB ベンダの提供する DLL、dbExpress ドライバが C++Builder によって提供される DLL となる。つまり DLL を入れ替えるだけで他の DB にも同様の接続を行うことができる。
アプリ (TSQLConnection コンポーネント) ↓ dbExpress ドライバ (dbxpmys.dll) ↓ ドライバ取得API (getSQLDriverMYSQL()) MySQL ドライバ (libmysql.dll) ↓ MySQL サーバ
では、先に DB 本体をインストールしてアクセスする DB とユーザ名までを作成する。MySQL の Web サイト から Windows (x86) を DL してインストールする。インストールが完了すると DB の初期設定ウィザードが立ち上がるので、ここで root ユーザのパスワードを変更しておく。
ウィザードが完了すると MySQL サーバが(2000/XP なら)サービスとして起動するようになるので、スタートメニューの [プログラム]-[MySQL]-[MySQL Server 5.0]-[MySQL Command Line Client] を起動し root ユーザのパスワードでログインする。(もしくはコマンドプロンプトから「mysql -u root -p」で パスワードを入力してログインする。)
そして DB アクセスに使うユーザとデータベースを作成する。
mysql> grant all on *.* to <ユーザ名> identified by '<パスワード>'; mysql> Flush privileges; mysql> Create databeaes <データベース名>; mysql> exit
いったん MySQL クライアントを抜けたら、今度は上で作成したユーザ名・パスワードで再度ログインし DB の選択できることを確認する。DB は作成しただけなので、この時点でテーブルなどはもちろんない。
mysql> use <データベース名>; mysql> show tables;
これで DB 側は準備ができたので、次いで dbExpress の設定を行う。まずは以下のふたつの DLL をパスの通ったディレクトリ(アプリケーションのカレントディレクトリ、もしくは C:\WINDOWS\ など)にコピーする。
| libmysql50.dll | <MySQL 5.0>\lib\opt\libmysql.dll をリネーム |
| dbxopenmysql50.dll | DbExpress drivers for MySQL V5.0 にある dbxopenmysql5_dll.zip を DL して解凍 |
dbExpress の設定はデフォルトでは C:\Program Files\Common Files\Borland Shared\DBExpress にある ini ファイルで行われる。この内容は以下の通りである。
| dbxconnections.ini | 接続設定一覧 |
| dbxdrivers.ini | ドライバ設定一覧 |
ini ファイルから接続情報を設定する場合は dbxdrivers.ini を開き [MYSQL5] セクションを以下のように追加する。
[MYSQL5] GetDriverFunc=getSQLDriverMYSQL50 LibraryName=dbxopenmysql50.dll VendorLib=libmysql50.dll BlobSize=-1 Database=DBNAME ErrorResourceFile= HostName=ServerName LocaleCode=0000 Password=password User_Name=user ServerCharSet=sjis
またファイル先頭の [Installed Drivers] セクションに以下の 1 行を追加してファイルを閉じる。
MYSQL5=1
そして BCB6 を起動したら、フォームに dbExpress パレットの SQLConnection コンポーネントを配置してダブルクリックする。[接続の追加] ボタンを押してドライバ名 : MYSQL5、接続名 : <接続名> として [OK] したら、接続の設定で Database、Hostname (サーバとクライアントが同じマシンなら localhost、またはサーバの IP アドレスなど)、Password、User_Name を上記で設定したものに変更する。その後、[接続のチェック] ボタンを押して、ユーザ名・パスワードを指定し「接続完了」ダイアログが表示されれば OK である。(接続完了すると該当 SQLConnection コンポーネントの Connected プロパティが true となる。)
なお、ini ファイルを標準の場所以外から読み込みたい場合は、dbxdrivers.ini 相当の内容のものを LoadParamsFromIniFile( ) メソッドで読み込めばよい。
勘の鋭い方ならばもうお気づきかもしれないが、ini ファイルの内容というのは、接続時に TSQLConnection コンポーネントのプロパティに設定される値ということであり、それをプログラムの外部に持っていたということである。そのため、当然ながら上述の接続情報を TSQLConnection のプロパティに対して動的にセットすることも可能である。例えば、フォーム上にボタンを配置してダブルクリックしたら以下のようなコードを書けばよい。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TSQLConnection* conn;
conn = new TSQLConnection(NULL);
try
{
conn->ConnectionName = "<接続名>";
conn->DriverName = "MYSQL5";
conn->GetDriverFunc = "getSQLDriverMYSQL50";
conn->KeepConnection = true;
conn->LibraryName = "dbxopenmysql50.dll";
// これが true だと接続時に ini ファイルから設定を読み込む
conn->LoadParamsOnConnect = false;
// これが true だと接続時に DB のログイン画面が表示される
conn->LoginPrompt = false;
conn->VendorLib = "libmysql50.dll";
conn->Params->Append("Database=<データベース名>");
conn->Params->Append("User_Name=<ユーザ名>");
conn->Params->Append("Password=<パスワード>");
conn->Params->Append("HostName=<ホスト名>");
conn->Params->Append("ServerCharSet=sjis");
conn->Open();
// DB の操作
conn->Close();
}
catch(EDatabaseError& e)
{
conn->Close();
delete conn;
}
catch(...)
{
conn->Close();
delete conn;
}
delete conn;
}
ちなみに、MySQL サーバのセットアップ時に defaultCharacterSet を sjis などとした場合は TSQLConnection の Params でも明示的に「ServerCharSet=sjis」の一文が必要となる。これが設定されていないとテーブルに含まれる日本語文字列が文字化けしてしまう。
▲ [ Top ]
|
Copyright (C) 2006 唯野 Comment to Webmaster Last Modified 2007.2.11 Since 2006.5.5 |