by Hippo2000(1999/12/2)
Win32-ODBCは名前の通りWin32環境下でODBCを使ってデータベースにアクセスするためのモジュールです。
なおこのドキュメントではActivePerlをインストールしたときに作成されるWin32-ODBCのHTMLlを私が日本語に訳そうとしたものです。わかりにくい説明は本物を見てください。(^_^;)
原本の著作権はDave Roth氏がお持ちです。詳しくは著作権をご覧ください。
内容等が間違っていたら修正します。ご連絡ください。
Win32::ODBC - Win32のためのODBC拡張
このモジュールを使うためには、以下のステートメントをスクリプトの先頭に入れてください:
use Win32::ODBC;
次に、DSNへのデータ接続を生成してください:
$Data = new Win32::ODBC("MyDSN");
注意: MyDSN にはODBCアドミニストレータで定義されたDSN やDSN接続文字列まさにそのものを指定することができます。
例: "DSN=My Database;UID=Brown Cow;PWD=Moo;"
$Dataが本当に未定義であるか、未定義であればエラーが発生したことをチェックしなければなりません。
ここまでくれば、心行くまでSQL問い合わせを送信し、情報を取り出すことができます!以下にあるこのモジュールによって提供されるメソッドについての説明やインストールでの注意で参照されるファイルTEST.PLでそれがどのように動くのかをご覧下さい。
最後に、終了したときには接続をクローズするのを忘れないで下さい:
$Data->Close();
Dan DeMaggioの <dmag@umich.edu> NTXS.C ODBC 実装に改造を加えたものです。 ODBC.PM パッケージのほとんども含めて、そのほとんどを再プログラムし、作り変えましたが、非常に中核となる部分はあいかわらずDanのコードをベースにしています(ありがとうDan!)
この拡張の履歴はオリジナル・アーカイブ(下記のインストールでの注意点 をご覧ください)に入っているHISTORY.TXT ファイルにあります。
では、このモジュールの特長はなんでしょうか?
このパッケージは各種の定数を定義しています。これらの定数をODBC::xxxxxという書き方で参照することができます。xxxxxが定数です。
例:
print ODBC::SQL_SQL_COLUMN_NAME, "\n";
以下のメソッドのドキュメントでは、メソッド・パラメータの後に*がついていれば、そのメソッドは新しいか、このバージョンで変更されたことを示します。
DSNはデータソース名(Data Source Name)または適切なODBCドライバ接続文字列です。
DSNへの実際の接続が行われる前に実装されているSQL接続オプションを指定することができます。これらのオプション/値は下記のGetConnectOption/SetConnectOption で指定されるものと同じであり、ODBC API仕様で定義されています。
成功すればデータベースへのハンドルを、失敗すればundefを返します。
[Qualifier] [Owner] [Name] [Type]
エラーの場合にはtrueを返します。
ODBC_ADD_DSN.......新しいDSNの追加
ODBC_MODIFY_DSN....既存のDSNの変更
ODBC_REMOVE_DSN....既存のDSNの削除
ODBC_ADD_SYS_DSN.......新しいシステムDSNの追加
ODBC_MODIFY_SYS_DSN....既存のシステムDSNの変更
ODBC_REMOVE_SYS_DSN....既存のシステムDSNの削除
DRIVERにドライバ(これはDataSources や Driversを使って取り出すことができます)を指定しなければなりません。
ATTRIBUTE1 は"DSN=xxx"
でなければなりません。xxx
のところはDSNの名前です。他の属性は以下のようなDSN属性をどれでも指定することができます:
"UID=Cow"
"PWD=Moo"
"Description=My little bitty Data Source Name"
成功すればtrueを、失敗すればfalseを返します。
注意1: ODBC_ADD_DSNを使うならば、少なくとも"DSN=xxx" とデータベースの場所は入れなければなりません。
例: MS Accessデータベースでは、DatabaseQualifierを指定しなければなりません。
"DBQ=c:\\...\\MyDatabase.mdb"
注意 2: ODBC_MODIFY_DSNを使うならば、"DNS=xxx" だけは指定する必要があります。他の属性は指定したように変更されます。
注意 3: ODBC_REMOVE_DSNを使うならば、"DNS=xxx" だけが指定する必要があります。
{フィールド名} => フィールド・データ
$ArrayName{'DSN'}=Driver
DSN はデータソース名(Data Source Name)使用されるとODBCドライバになります。
デバッグの値(1または0)を返します。
$ArrayName{'DRIVER'}=Attrib1;Attrib2;Attrib3;...
DRIVER のところはODBCドライバ名、AttribX のところにはドライバによって決められた属性になります。
スカラ・コンテキストで呼ばれれば、3つの要素の配列が返されます:
( ERROR_NUMBER, ERROR_TEXT, CONNECTION_NUMBER )
文字列コンテキストであれば、文字列が返されます:
"[ERROR_NUMBER] [CONNECTION_NUMBER] [ERROR_TEXT]"
デバッグがオンであれば、さらに2つの変数が返されます:
( ..., FUNCTION, LEVEL )
FUNCTIONはエラーが発生した関数の名前、LEVELはエラーについての追加の情報(通常はエラーの位置)です。
注意 1: もしSQLExtendedFetchやその意味するところを知らないのであれば、パラーメータを指定せず通常のFetchRowだけにとどめてください.。
注意 2: SQLFetchとSQLExtendedFetchの混合した呼び出しに対して、ODBC API は明確に警告します。両方ではなくどちらか一方を使ってください。
ROW が指定されると、キーセットを相対的にROW番目の行に移動します。
ROW が指定され、TYPEが指定されなければ、TYPEにはRELATIVEが使われます。
読みこむことが出来るレコードがあればtrueを、もうレコードがなければfalseを返します。
指定されたオプションによって文字列またはスカラを返します。
最初の要素が(成功であれば)falseまたはtrue(成功でなければ)であるフィールド・データの配列を返します。
DSNが指定されなければ、現在の接続が使われます。
返される連想配列は以下のようになります:
keys=DSN keyword; values=Keyword value. $Data{$Keyword}=Value
FUNCTIONはSQL_API_SQLTRANSACTのようなODBC API定数の形式でなければなりません。
返される配列には以下のような結果が入っています:
$Results{SQL_API_SQLTRANSACT}=Value
例:
$Results = $O->GetFunctions(
$O->SQL_API_SQLTRANSACT,
SQL_API_SQLSETCONNECTOPTION
);
$ConnectOption = $Results{SQL_API_SQLSETCONNECTOPTION};
$Transact = $Results{SQL_API_SQLTRANSACT};
デフォルトでは現在のオブジェクトの接続が使われます。CONNECTIONが適切な接続番号であれば、それが使われます。
指定されたオプションによって文字列またはスカラを返します。
例:
"SELECT * FROM [foo] SELECT * FROM [bar]"
注意: すべてのドライバがこれをサポートしているわけではありません。
さらにデータがあれば1、そうでなければundef。
注意1: この関数はすべてのODBCドライバによってサポートされているわけではありません!これをサポートはしていても、すべてのステートメントではないドライバもあります(例えばUPDATE、INSERT、DELETE コマンドではサポートしても、SELECTコマンドではサポートしていないなど)
注意 2: 多くのデータソースはFetchするまではリザルトセットの行の数を返すことが出来ません;相互運用性を高めるために、アプリケーションは、この動作を信頼するべきではありません。
影響を受けた行の数または現在の文脈でドライバによってサポートされていなければ-1です。
戻り値はありません。
成功すればtrue、失敗すればfalseを返します。
成功すればtrue、失敗すればfalseを返します。
成功すればtrue、失敗すればfalseを返します。
レコードのフィールドデータを取り出すために確保されるメモリの量は動的で、もし大きくする必要があれば変更されます。MS Accessデータベースでのメモ型フィールドが最後には4Gもの空間を要求することを知っています。これはちょっと多いので、データ取り出しのために確保される規定の制限(2,147,483,647 バイト)があります。
フィールド・データが10,240を超えるデータベースを誰かが持っているかもしれないので、この関数を使って2,147,483,647まで制限を増やすことが出来ます。(それ以上必要であれば、リコンパイルしてください)
最大バイト数を返します。
TYPEには以下のいずれかが指定できます:
SQL_CLOSE
SQL_DROP
SQL_UNBIND
SQL_RESET_PARAMS
新しく設定したタイプを示す文字列を返します。
成功すればtrue、失敗すればfalseを返します。
戻り値はありません。
成功すれば? を、失敗すればエラー番号を返します。
テーブル名の配列を返します。
TYPEには以下のいずれかが指定できます:
SQL_COMMIT
SQL_ROLLBACK
注意: これはトランザクションをサポートしているODBCでのみ機能します。以下のでtrueを返せばそのドライバはサポートしています:
$O->GetFunctions($O->SQL_API_SQLTRANSACT)[1]
(詳細は GetFunctions をご覧下さい)
成功すればtrue を、そうでなければfalse を返します。
このモジュールにはどのような知られている問題がありますか?
ActivePerl以外のPerlのビルドでこのモジュールを使いたいのであれば、このモジュールのオリジナル・ソース・ディストリビューションを取り出したいかもしれません:
ftp://ftp.roth.net:/pub/ntperl/ODBC/970208/Bin/Win32_ODBC_Build_CORE.zip
または他のアーカイブも同じ場所にあります。このモジュールをマニュアルでインストールするときのヒントや解析例外(parse exception)、このモジュールのためのテストスクリプトへのポインタについては、同梱されているREADMEをご覧下さい。
Win32::ODBCについてのFAQが以下のところにあります:
http://www.roth.net/odbc/odbcfaq.htm
Dave Roth <rothd@roth.net>
Dan DeMaggio <dmag@umich.edu> によるオリジナル・コードをベースにしています。
(原文)
I do not guarantee ANYTHING with this package. If you use it you are doing so AT YOUR OWN RISK! I may or may not support this depending on my time schedule.
(参考)
私はこのパッケージについて何ら保証はいたしません。ご使用の際には、ご自身のリスクの上で行ってください!私のスケジュールによってサポートしたりしなかったりします。
Last Modified 1999.09.25.
Copyright (c) 1996-1998 Dave Roth. All rights reserved.
Courtesy of Roth Consulting: http://www.roth.net/consult/
Use under GNU General Public License. Details can be found at: http://www.gnu.org/copyleft/gpl.html
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。