Win32-ODBCモジュール(日本語チョウ訳)

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アドミニストレータで定義されたDSNDSN接続文字列まさにそのものを指定することができます。

    例: "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";

特別な書き方

以下のメソッドのドキュメントでは、メソッド・パラメータの後に*がついていれば、そのメソッドは新しいか、このバージョンで変更されたことを示します。


コンストラクタ

new ( ODBC_OBJECT | DSN [, (OPTION1, VALUE1), (OPTION2, VALUE2) ...] ) *
新しいODBC接続をDSNに基づいて生成します。または既存のODBCオブジェクトを指定するならば、新しいODBCオブジェクトは生成されますが、ODBC_OBJECTによって指定されたODBC接続を使います。(新しいオブジェクトはODBC_OBJECTでのhdbc接続を使った新しいhstmtとなります)

DSNはデータソース名(Data Source Name)または適切なODBCドライバ接続文字列です。

DSNへの実際の接続が行われる前に実装されているSQL接続オプションを指定することができます。これらのオプション/値は下記のGetConnectOption/SetConnectOption で指定されるものと同じであり、ODBC API仕様で定義されています。

成功すればデータベースへのハンドルを、失敗すればundefを返します。


メソッド

Catalog ( QUALIFIER, OWNER, NAME, TYPE )
そのDSNについてのテーブル情報が入った新しいデータ・セットを生成するようODBCに指示します。データを取り出すにはFetchとData または DataHash を使ってください。返されるフォーマットは以下の通りです:
    [Qualifier] [Owner] [Name] [Type]

エラーの場合にはtrueを返します。

ColAttributes ( ATTRIBUTE [, FIELD_NAMES ] )
現在のレコード・セットでのFIELD_NAMESリストにある各フィールドの属性ATTRIBUTEを返します。もしFIELD_NAMEが空ならば、すべてのフィールドと見なされます。属性は連想配列で返されます。
ConfigDSN ( OPTION, DRIVER, ATTRIBUTE1 [, ATTRIBUTE2, ATTRIBUTE3, ... ] )
DSNの構成を設定します:OPTIONには以下の値が指定できます:
    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にドライバ(これはDataSourcesDriversを使って取り出すことができます)を指定しなければなりません。

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" だけが指定する必要があります。

Connection ()
そのODBC接続に関連付けられた接続番号を返します。
Close ()
ODBC接続をクローズします。何も値を返しません。
Data ( [ FIELD_NAME ] )
FILED_NAMEの名前のカラムまたは(何も指定されなければ)現在の行の内容を返します。
DataHash ( [ FIELD1, FIELD2, ... ] )
FIELD1、FIELD2、...のまたは(何も指定されなければ)行全体の内容を以下のような形式の連想配列で返します:
    {フィールド名} => フィールド・データ
DataSources ()
データ・ソースとそれについてODBC注記の連想配列を返します。以下のような形式で返されます:
    $ArrayName{'DSN'}=Driver

DSN はデータソース名(Data Source Name)使用されるとODBCドライバになります。

Debug ( [ 1 | 0 ] )
デバッグ・オプションのオンまたはオフを設定します。何も指定しなければ、変更されません。

デバッグの値(1または0)を返します。

Drivers ()
ODBCとその属性の連想配列を返します。以下の形式で返されます:
    $ArrayName{'DRIVER'}=Attrib1;Attrib2;Attrib3;...

DRIVER のところはODBCドライバ名、AttribX のところにはドライバによって決められた属性になります。

DropCursor ( [ CLOSE_TYPE ] )
ODBCオブジェクトに結び付けられたカーソルを落とします。これはカーソルを強制的に解放させます。これはSetStmtCloseTypeをオーバーライドしますが、ODBCオブジェクトはStmtCloseType設定を失いません。CLOSE_TYPEにはSmtpCloseTypeに指定できるものが全て指定でき、指定されたcloseタイプを使ってstmtへのクローズが行われます。
 
成功すればtrue、失敗すればfalseを返します。
DumpData ()
現在のデータセットのフィールド名とすべてのレコードを画面にダンプします。主にデバッグのために使われます。戻り値はありません。
Error ()
最後にぶつかったエラーを返します。返される値はコンテキストに依存します:

スカラ・コンテキストで呼ばれれば、3つの要素の配列が返されます:

    ( ERROR_NUMBER, ERROR_TEXT, CONNECTION_NUMBER )

文字列コンテキストであれば、文字列が返されます:

    "[ERROR_NUMBER] [CONNECTION_NUMBER] [ERROR_TEXT]"

デバッグがオンであれば、さらに2つの変数が返されます:

    ( ..., FUNCTION, LEVEL )

FUNCTIONはエラーが発生した関数の名前、LEVELはエラーについての追加の情報(通常はエラーの位置)です。

FetchRow ( [ ROW [, TYPE ] ] )
キーセットから次のレコードを取り出します。ROWと/またはTYPEが指定されれば、SQLFetchの代りにSQLExtendedFetchを使って呼び出しが行われます。

注意 1: もしSQLExtendedFetchやその意味するところを知らないのであれば、パラーメータを指定せず通常のFetchRowだけにとどめてください.。

注意 2: SQLFetchとSQLExtendedFetchの混合した呼び出しに対して、ODBC API は明確に警告します。両方ではなくどちらか一方を使ってください。

ROW が指定されると、キーセットを相対的にROW番目の行に移動します。

ROW が指定され、TYPEが指定されなければ、TYPEにはRELATIVEが使われます。

読みこむことが出来るレコードがあればtrueを、もうレコードがなければfalseを返します。

FieldNames ()
現在のデータセットで見つかったフィールド名の配列を返します。順番は保証しません。
GetConnections ()
現在オープンしている接続をあらわす接続番号の配列を返します。
GetConnectOption ( OPTION )
指定された接続オプションOPTIONの値を返します。オプションと値についての更なる情報はODBCドキュメントを参照してください。

指定されたオプションによって文字列またはスカラを返します。

GetCursorName ()
現在のカーソルの名前を文字列またはundefで返します。
GetData ()
データセットから現在の行を取り出します。通常はユーザによって使われません;これは内部で使用されます。

最初の要素が(成功であれば)falseまたはtrue(成功でなければ)であるフィールド・データの配列を返します。

getDSN ( [ DSN ] )
指定されたDSNのための構成を示す連想配列を返します。

DSNが指定されなければ、現在の接続が使われます。

返される連想配列は以下のようになります:

    keys=DSN keyword; values=Keyword value. $Data{$Keyword}=Value
GetFunctions ( [ FUNCTION1, FUNCTION2, ... ] )
指定された関数をサポートするODBCドライバの能力を示す連想配列を返します。関数が指定されなければ、すべての可能な関数とその値が入った100個もの要素をもつ連想配列が返されます。

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};
GetInfo ( OPTION )
特定の指定されたオプションの値を示す文字列を返します。
GetMaxBufSize ()
現在MaxBufSizeのために取られている最大値を返します。詳細はSetMaxBufSize.をご覧ください。
GetSQLState () *
ODBCによって報告されるSQLステートを示す文字列を返します。SQLステートはODBCマネージャまたはODBCドライバがSQL関数を実行した後に返すコードです。これはデバッグ目的ではとても役に立ちます。
GetStmtCloseType ( [ CONNECTION ] )
hstmtが開放されるたびに使われるクローズ・タイプをあらわす文字列を返します。詳細についてはSetStmtCloseType をご覧ください。

デフォルトでは現在のオブジェクトの接続が使われます。CONNECTIONが適切な接続番号であれば、それが使われます。

GetStmtOption ( OPTION )
指定されたステートメント・オプションOPTIONの値を返します。オプションと値についての更なる情報はODBCドキュメントを参照してください。

指定されたオプションによって文字列またはスカラを返します。

Results ()
これは問い合わせからまだ取り出せるデータがあるかないかを報告します。問い合わせが以下のような複数SELECTであれば起こり得ます。

例:

    "SELECT * FROM [foo] SELECT * FROM [bar]"

注意: すべてのドライバがこれをサポートしているわけではありません。

さらにデータがあれば1、そうでなければundef

RowCount ( CONNECTION )
UPDATE、INSERT、DELETE ステートメントでは、戻り値は要求によって影響を受けた行の数または影響を受けた行の数が利用できなければ-1です。

注意1: この関数はすべてのODBCドライバによってサポートされているわけではありません!これをサポートはしていても、すべてのステートメントではないドライバもあります(例えばUPDATE、INSERT、DELETE コマンドではサポートしても、SELECTコマンドではサポートしていないなど)

注意 2: 多くのデータソースはFetchするまではリザルトセットの行の数を返すことが出来ません;相互運用性を高めるために、アプリケーションは、この動作を信頼するべきではありません。

影響を受けた行の数または現在の文脈でドライバによってサポートされていなければ-1です。

Run ( SQL )
SQLコマンドSQLを実行し、それについての情報を画面にダンプします。主にデバッグのために使われます。

戻り値はありません。

SetConnectOption ( OPTION ) *
指定された接続オプションOPTIONの値を設定します。オプションと値についての更なる情報はODBCドキュメントを参照してください。

成功すればtrue、失敗すればfalseを返します。

SetCursorName ( NAME ) *
現在のカーソルの名前を設定します。

成功すればtrue、失敗すればfalseを返します。

SetPos ( ROW [, OPTION, LOCK ] ) *
(現在のデータ/リザルトセットではなく)現在のキーセットでのROW番目の行にカーソルを移動します。

成功すればtrue、失敗すればfalseを返します。

SetMaxBufSize ( SIZE )
これは特定の接続のためのMaxBufSizeを設定します。これはほとんど必要がありません。しかし...

レコードのフィールドデータを取り出すために確保されるメモリの量は動的で、もし大きくする必要があれば変更されます。MS Accessデータベースでのメモ型フィールドが最後には4Gもの空間を要求することを知っています。これはちょっと多いので、データ取り出しのために確保される規定の制限(2,147,483,647 バイト)があります。

フィールド・データが10,240を超えるデータベースを誰かが持っているかもしれないので、この関数を使って2,147,483,647まで制限を増やすことが出来ます。(それ以上必要であれば、リコンパイルしてください)

最大バイト数を返します。

SetStmtCloseType ( TYPE [, CONNECTION ] )
接続のための特定のhstmt クローズ・タイプを指定します。これはODBCFreeStmt(hstmt, TYPE)と同じです。デフォルトでは、接続は現在のオブジェクトが使われます。CONNECTIONが適切な接続番号であれば、それが使われます。

TYPEには以下のいずれかが指定できます:

    SQL_CLOSE
    SQL_DROP
    SQL_UNBIND
    SQL_RESET_PARAMS

新しく設定したタイプを示す文字列を返します。

SetStmtOption ( OPTION ) *
指定されたステートメント・オプションOPTIONの値を設定します。オプションと値についての更なる情報はODBCドキュメントを参照してください。

成功すればtrue、失敗すればfalseを返します。

ShutDown ()
ODBC接続をクローズし、それについての情報を画面にダンプします。主にデバッグのために使われます。

戻り値はありません。

Sql ( SQL_STRING )
現在の接続でSQLコマンドSQL_STRINGを実行します。

成功すれば? を、失敗すればエラー番号を返します。

TableList ( QUALIFIER, OWNER, NAME, TYPE )
DSNで利用可能なテーブルのカタログを返します。パラメータが分からなければ、単に空文字列""を指定してください。

テーブル名の配列を返します。

Transact ( TYPE ) *
ODBC接続を強制的にrollbackまたはcommitさせます。

TYPEには以下のいずれかが指定できます:

    SQL_COMMIT
    SQL_ROLLBACK

注意: これはトランザクションをサポートしているODBCでのみ機能します。以下のでtrueを返せばそのドライバはサポートしています:

    $O->GetFunctions($O->SQL_API_SQLTRANSACT)[1]

(詳細は GetFunctions をご覧下さい)

成功すればtrue を、そうでなければfalse を返します。

Version ( PACKAGES )
要求されたパッケージ(ODBC.pm または ODBC.PLL)のバージョン番号の配列を返します。PACKAGEが空であれば、すべてのバージョン番号が返されます。

制限

このモジュールにはどのような知られている問題がありますか?


インストールでの注意

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


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。