001--[[プログラミングガイド]]~
002*Perl+DBI/DBDでFirebirdをアクセス [#f6d44328]
003 Perl から Firebird にアクセスするための専用モジュールとして IBPerl と
004いうものがありますが、IBPerl は何年か前に開発が終了しており、最近では
005DBI によるアクセスが推奨されています。~
006 ここでは、Windows + ActivePerl での入手・インストール法と簡単な使用例
007を書きます。~
008 全ての情報は 2004/08/03 現在での最新です。
009 
010#contents
011 
012**DBI/DBDとは? [#p9c1da51]
013 Perlから各種データベースを共通の手段でアクセスするためのモジュールです。
014DBDは DBI で使用するドライバで、データベースごとに用意されています。~
015 Firebirdには専用の DBD は今のところ用意されていないようなので、InterBase用
016の DBD を使用します。Firebird1.5/IB6.01までの動作が確認されているようです。~
017 他には ODBC 用の DBD も存在しますので、そちらを使用することも可能です。
018その場合は、Firebird 用 ODBCドライバも別途に必要となりますし、使用例も
019ODBC用に合わせて修正の必要があります。
020 
021 
022**下準備 [#ucce3ed8]
023 ActivePerlを普通にインストールすれば、ppmというコマンドにパスが通ります
024ので、これを使用してモジュールのインストールを行います。パスが通っていない
025場合は、手動で通しておいてください。~
026 ''DBDがfbclient.dllを参照しますので、インストールしたFirebirdのbinディレクトリへ実行パスが通っていることを確認してください。''
027パスが通っていない場合、スクリプト実行時にデータベース接続の段階で失敗します。
028 
029**DBDの入手 [#b9d22fc3]
030 IB用DBDを[[SourceForgeの開発プロジェクト:http://sourceforge.net/projects/dbi-interbase/]]
031から入手します。ソースとppmの2種類があると思いますが、使用にはppmのみを入手
032すればとりあえず問題ありません。2004/08/02現在での最新版はV0.43です。~
033 ppm形式をダウンロードする場合は、使用する Perl のバージョンに合っている
034ものをダウンロードして下さい。今のところは5.6用と5.8用の2種類があるようです。~
035 zip形式で圧縮されていますので、適当なフォルダに展開してください。
036(ここでは、Cドライブの\ExDBD_IBに展開したものとして以後の例を示します)
037 
038**DBIの入手 [#s5049523]
039 ppmコマンドを使用してオンラインで入手します。インストール作業と同時に
040行いますので、特にファイルとして入手する必要はありません。~
041 
042**インストール [#nac7172a]
043 
044***DBIのインストール [#e7c02c4c]
045 ppmコマンドを使用して、オンラインでモジュールをダウンロードしインストールを
046行います。具体的には、
047 ppm install DBI
048 とコマンドラインから打ち込みます。ちなみに、インストール済みの場合はその旨
049を示すメッセージが出ます。~
050 インストールに成功した場合は、最終的に以下のようなコンソール表示になるはず
051です。
052 
053 C:\>ppm install DBI
054 ====================
055 Install 'DBI' version 1.43 in ActivePerl 5.8.3.809.
056 ====================
057 Downloaded 513616 bytes.
058 Extracting 69/69: blib/arch/auto/DBI/Driver_xst.h
059 Installing C:\Perl\site\lib\auto\DBI\dbd_xsh.h
060 Installing C:\Perl\site\lib\auto\DBI\DBI.bs
061 Installing C:\Perl\site\lib\auto\DBI\DBI.dll
062 Installing C:\Perl\site\lib\auto\DBI\DBI.exp
063 Installing C:\Perl\site\lib\auto\DBI\DBI.lib
064 Installing C:\Perl\site\lib\auto\DBI\dbipport.h
065 Installing C:\Perl\site\lib\auto\DBI\dbivport.h
066 Installing C:\Perl\site\lib\auto\DBI\DBIXS.h
067 Installing C:\Perl\site\lib\auto\DBI\dbi_sql.h
068 Installing C:\Perl\site\lib\auto\DBI\Driver.xst
069 Installing C:\Perl\site\lib\auto\DBI\Driver_xst.h
070 Installing C:\Perl\html\bin\dbiprof.html
071 Installing C:\Perl\html\bin\dbiproxy.html
072 Installing C:\Perl\html\site\lib\DBI.html
073 Installing C:\Perl\html\site\lib\Bundle\DBI.html
074 Installing C:\Perl\html\site\lib\DBD\DBM.html
075 Installing C:\Perl\html\site\lib\DBD\File.html
076 Installing C:\Perl\html\site\lib\DBD\Proxy.html
077 Installing C:\Perl\html\site\lib\DBD\Sponge.html
078 Installing C:\Perl\html\site\lib\DBI\Changes.html
079 Installing C:\Perl\html\site\lib\DBI\DBD.html
080 Installing C:\Perl\html\site\lib\DBI\FAQ.html
081 Installing C:\Perl\html\site\lib\DBI\Profile.html
082 Installing C:\Perl\html\site\lib\DBI\ProfileData.html
083 Installing C:\Perl\html\site\lib\DBI\ProfileDumper.html
084 Installing C:\Perl\html\site\lib\DBI\ProxyServer.html
085 Installing C:\Perl\html\site\lib\DBI\PurePerl.html
086 Installing C:\Perl\html\site\lib\DBI\W32ODBC.html
087 Installing C:\Perl\html\site\lib\DBI\Const\GetInfoReturn.html
088 Installing C:\Perl\html\site\lib\DBI\Const\GetInfoType.html
089 Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ANSI.html
090 Installing C:\Perl\html\site\lib\DBI\Const\GetInfo\ODBC.html
091 Installing C:\Perl\html\site\lib\DBI\DBD\Metadata.html
092 Installing C:\Perl\html\site\lib\DBI\ProfileDumper\Apache.html
093 Installing C:\Perl\html\site\lib\DBI\SQL\Nano.html
094 Installing C:\Perl\html\site\lib\Win32\DBIODBC.html
095 Files found in blib\arch: installing files in blib\lib into architecture dependent library tree
096 Installing C:\Perl\site\lib\DBI.pm
097 Installing C:\Perl\site\lib\Bundle\DBI.pm
098 Installing C:\Perl\site\lib\DBD\DBM.pm
099 Installing C:\Perl\site\lib\DBD\ExampleP.pm
100 Installing C:\Perl\site\lib\DBD\File.pm
101 Installing C:\Perl\site\lib\DBD\NullP.pm
102 Installing C:\Perl\site\lib\DBD\Proxy.pm
103 Installing C:\Perl\site\lib\DBD\Sponge.pm
104 Installing C:\Perl\site\lib\DBI\Changes.pm
105 Installing C:\Perl\site\lib\DBI\DBD.pm
106 Installing C:\Perl\site\lib\DBI\FAQ.pm
107 Installing C:\Perl\site\lib\DBI\Profile.pm
108 Installing C:\Perl\site\lib\DBI\ProfileData.pm
109 Installing C:\Perl\site\lib\DBI\ProfileDumper.pm
110 Installing C:\Perl\site\lib\DBI\ProxyServer.pm
111 Installing C:\Perl\site\lib\DBI\PurePerl.pm
112 Installing C:\Perl\site\lib\DBI\W32ODBC.pm
113 Installing C:\Perl\site\lib\DBI\Const\GetInfoReturn.pm
114 Installing C:\Perl\site\lib\DBI\Const\GetInfoType.pm
115 Installing C:\Perl\site\lib\DBI\Const\GetInfo\ANSI.pm
116 Installing C:\Perl\site\lib\DBI\Const\GetInfo\ODBC.pm
117 Installing C:\Perl\site\lib\DBI\DBD\Metadata.pm
118 Installing C:\Perl\site\lib\DBI\ProfileDumper\Apache.pm
119 Installing C:\Perl\site\lib\DBI\SQL\Nano.pm
120 Installing C:\Perl\site\lib\Win32\DBIODBC.pm
121 Installing C:\Perl\bin\dbiprof
122 Installing C:\Perl\bin\dbiprof.bat
123 Installing C:\Perl\bin\dbiproxy
124 Installing C:\Perl\bin\dbiproxy.bat
125 Successfully installed DBI version 1.43 in ActivePerl 5.8.3.809.
126  
127 C:\>
128 
129 
130***DBDのインストール [#va42b45d]
131 ppmコマンドを使用してインストールを行います。ダウンロードしたファイル
132をすべて適当なディレクトリ(今回はC:\ExDBD_IB)に展開しておいてください。
133IB用DBDは、現在のところではオンラインインストールは出来ないようです。~
134 インストールを行うには、zipを展開したディレクトリに移動した後に、
135 ppm install DBD-InterBase.ppd
136 とコマンドラインから打ち込みます。ちなみに、インストール済みの場合は
137その旨を示すメッセージが出ます。~
138 インストールに成功した場合は、最終的に以下のようなコンソール表示に
139なるはずです。
140 
141 C:\>cd ExDBD_IB
142  
143 C:\ExDBD_IB>ppm install DBD-InterBase.ppd
144 ====================
145 Install 'DBD-InterBase' version 0.43 in ActivePerl 5.8.3.809.
146 ====================
147 Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.bs
148 Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.dll
149 Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.exp
150 Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.lib
151 Installing C:\Perl\site\lib\auto\DBD\InterBase\InterBase.pdb
152 Files found in blib\arch: installing files in blib\lib into architecture dependent library tree
153 Installing C:\Perl\site\lib\Bundle\DBD\InterBase.pm
154 Installing C:\Perl\site\lib\DBD\InterBase.pm
155 Installing C:\Perl\site\lib\DBD\InterBase\FAQ.pm
156 Installing C:\Perl\site\lib\DBD\InterBase\GetInfo.pm
157 Successfully installed DBD-InterBase version 0.43 in ActivePerl 5.8.3.809.
158  
159 C:\ExDBD_IB>
160 
161 
162**スクリプトを実行させて確認 [#zc8a3705]
163 実際に、Perlのスクリプトを走らせて見て動作確認を行います。ActivePerlの
164場合、通常は拡張子で関連付けが行われているので、拡張子を".pl"に設定すれば
165コマンドプロンプトからそのまま実行できます。
166 
167***接続確認 [#v089cb8f]
168 単純な接続確認です。以下のスクリプトを"test.pl"のファイル名で保存してください。
169ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。~
170&br;
171test.plのリスト:
172 
173 #!/usr/bin/perl
174 # 接続テスト : test.pl
175 use DBI;
176  
177 # パラメータ設定
178 $host     = 'localhost';
179 $dbpath   = 'e:/firebird/TEST.FDB';
180 $user     = 'SYSDBA';
181 $password = 'masterkey';
182  
183 # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは
184 #   セミコロン(;)で区切らなければならないので注意。
185 $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath";
186  
187 $dbh = DBI->connect($data_source, $user, $password);
188 unless($dbh) {
189     print STDERR "Error : connect.\n";
190     exit -1;
191 }
192  
193 $dbh->disconnect();
194  
195 print STDERR "Succses.\n";
196  
197 
198&br;
199 とりあえず、実行してみましょう。
200&br;
201test.plの実行例(成功時):
202  
203 C:\>test.pl
204 Succses.
205  
206 
207***単純SELECT実行 [#l171c001]
208 単純なSELECT文の実行です。以下のスクリプトを"select.pl"のファイル名で保存してください。
209ホストやデータベースのパスの設定は、環境に合わせて変更する必要があります。~
210&br;
211select.plのリスト:
212 #!/usr/bin/perl
213 # SELECT テスト : select.pl
214 # テーブルの名前は、コマンドライン引数で指定する。
215 use DBI;
216  
217 # パラメータ設定
218 $host     = 'localhost';
219 $dbpath   = 'e:/firebird/TEST.FDB';
220 $user     = 'SYSDBA';
221 $password = 'masterkey';
222  
223 # ※ドライバの指定はコロン(:)で、IB/FB用の接続パラメータは
224 #   セミコロン(;)で区切らなければならないので注意。
225 $data_source = 'dbi:InterBase:' . "host=$host;dbname=$dbpath";
226  
227 $dbh = DBI->connect($data_source, $user, $password);
228 unless($dbh) {
229     print STDERR "Error : connect.\n";
230     exit -1;
231 }
232  
233 #クエリの作成
234 $sql = "SELECT * FROM $ARGV[0]";
235  
236 $sth = $dbh->prepare($sql);
237 if ($sth) {
238     $sth->execute();     #パラメータ指定はなし
239     while ($result = $sth->fetchrow()) {
240         print "$result\n";
241     }
242     $sth->finish();
243 } else {
244     print STDERR "Error : prepare.\n";
245 }
246  
247 $dbh->disconnect();
248  
249 
250&br;
251 コマンドラインでテーブル名を指定して実行します。
252&br;
253select.plの実行例:
254  
255 C:\>select.pl TEST
256 1
257 アイテム�
258  
259 
260**接続パラメータの説明 [#yb17e531]
261 DBI::connectで指定する接続パラメータは次のようになっています。
262必須項目はデータベース名のみです。大抵はデータベース名とホスト名の指定
263程度での使用が多いでしょう。~
264 
265|パラメータ|説明|必須項目|h
266|database&br;又はdbname&br;又はdb|データベース名|○|
267|host|ホスト名||
268|port|ポート番号||
269|ib_dialect|Dialect数||
270|ib_role|ロール名||
271|ib_charset|キャラクタセットの指定||
272|ib_cache|キャッシュバッファサイズ||
273 
274 実際の指定は、InterBase用DBD使用の指定と、独自の接続パラメータの指定
275を同時に行います。同時の接続パラメータが複数ある場合は、パラメータの間を
276セミコロンで区切ります。~
277 例えば、次のような形になります。
278 
279 $dbh = DBI->connect("dbi:InterBase:dbname=$dbname","sysdba","masterkey");
280 
281 マルチラインでの指定も可能です。
282 
283 $dsn =<< "DSN";
284 dbi:InterBase:dbname=$dbname;
285 host=$host;
286 port=$port;
287 ib_dialect=$dialect;
288 ib_role=$role;
289 ib_charset=$charset;
290 ib_cache=$cache
291 DSN
292  
293 $dbh =  DBI->connect($dsn, $username, $password);