DBD::Adabasモジュール(日本語チョー訳)

by Hippo2000(1999/11/25)

DBD::Adabasモジュールのなのです。

なおこのドキュメントではCPANで公開されているDBD::Adabasのドキュメントを日本語化したものです。というよりほとんどDBD::ODBCをそのまま持ってきました。わかりにくい部分は本物を見てください。(^^;;

原本の著作権はTim Bunceさんがお持ちです(?)。

なお内容等が間違っていたら修正します。ご連絡ください


目次


名前

DBD::Adabas - DBIのためのAdabasドライバ


概要

  use DBI;
  $dbh = DBI->connect('dbi:Adabas:DSN', 'user', 'password');

さらなる情報についてはDBIのマニュアルをご覧下さい。


説明


最近の更新

(ほとんど原文のまま)

DBD::Adabas 0.21
Fixed blob handling.
DBD::ODBC 0.20
SQLColAttributes fixes for SQL Server and MySQL. Fixed tables method by renaming to new table_info method. Added new tyoe_info_all method. Improved Makefile.PL support for Adabase.
DBD::ODBC 0.19
Added iODBC source code to distribution.Fall-back to using iODBC header files in some cases.
DBD::Adabas 0.18
Enhancements to build process. Better handling of errors in error handling code.
DBD::Adabas 0.17
This release is mostly due to the good work of Jeff Urlwin. My eternal thanks to you Jeff.

Fixed ``SQLNumResultCols err'' on joins and 'order by' with some drivers (see Microsoft Knowledge Base article #Q124899). Thanks to Paul O'Fallon for that one.

Added more (probably incomplete) support for unix Adabas in Makefile.PL

Increased default SQL_COLUMN_DISPLAY_SIZE and SQL_COLUMN_LENGTH to 2000 for drivers that don't provide a way to query them dynamically. Was 100!

When fetch reaches the end-of-data it automatically frees the internal ODBC statement handle and marks the DBI statement handle as inactive (thus an explicit 'finish' is *not* required).

Also:

  LongTruncOk for Oracle ODBC (where fbh->datalen < 0)
  Added tracing into SQLBindParameter (help diagnose oracle odbc bug)
  Fixed/worked around bug/result from Latest Oracle ODBC driver where in
     SQLColAttribute cbInfoValue was changed to 0 to indicate fDesc had a value
  Added work around for compiling w/ActiveState PRK (PERL_OBJECT)
  Updated tests to include date insert and type
  Added more "backup" SQL_xxx types for tests                                  
  Updated bind test to test binding select
  NOTE: bind insert fails on Paradox driver (don't know why)

Added support for: (see notes below)

  SQLGetInfo       via $dbh->func(xxx, GetInfo)
  SQLGetTypeInfo   via $dbh->func(xxx, GetTypeInfo)
  SQLDescribeCol   via $sth->func(colno, DescribeCol)
  SQLColAttributes via $sth->func(xxx, colno, ColAttributes)
  SQLGetFunctions  via $dbh->func(xxx, GetFunctions)
  SQLColumns       via $dbh->func(catalog, schema, table, column, 'columns')

Fixed $DBI::err to reflect the real ODBC error code which is a 5 char code, not necessarily numeric.

Fixed fetches when LongTruncOk == 1.

Updated tests to pass more often (hopefully 100% <G>)

Updated tests to test long reading, inserting and the LongTruncOk attribute.

Updated tests to be less driver specific.

今やこれらはテーブルを作るのにSQLGetTypeInfoに大きく頼っています。テストではこの関数をlong、varcharなどの型を正確に生成するためSQL型の名前をドライバに訊ねるのに使います。例えば、SQL_VARCHAR型のSQL Nameには、OracleではVARCHAR2で、MS AccessはTEXTを使っています。繰り返せば、SQL_LONGVARCHARはOracleではLONGであり、AccessではMEMOです。テストは現在、これを正しく取り扱っています。(少なくともAccessとOracle、MS SQLサーバーはテストします)

 

ODBC APIアクセスのためのプライベート関数

現在funcインターフェースを使って実装されている関数のうち少なくともいくつかは、DBI仕様で、より正式な関数に「移動」することが予想されます。DBI仕様が実装のメタデータをサポート/公式化するときにおこなわれるでしょう。これらのほとんどの関数はドライバとデータソースからより多くの情報を取得します。

GetInfo
この関数はODBC SQLGetInfo呼び出しに対応します。これはLevel 1 ODBC 関数です。以下に例を示します:
  $value = $dbh->func(6, GetInfo);

この関数はスカラ値を返し、それは数字または文字の値です。これはGetInfoに渡される引数に依存します。

SQLGetTypeInfo
この関数はODBC SQLGetTypeInfo に対応します。これはLevel 1 ODBC 関数です。以下に例を示します:
  use DBI qw(:sql_types);
  $sth = $dbh->func(SQL_ALL_TYPES, GetInfo);
  while (@row = $sth->fetch_row) {
    ...
  }

この関数はDBIステートメントハンドルを返します。それは要求された型と互換性のある型名の入った結果セットを表します。SQL_ALL_TYPESはそのODBCドライバがサポートするすべての型を得るために使われます。注意:SQL_VARCHARのような値が正しく解釈されるために、use DBIにqw(:sql_types)を入れることは、とても重要です。これはSQL型名をプログラムの名前空間にインポートします。qw(:sql_types)を忘れて、おかしな結果を取得することは非常に多い間違いです。

GetFunctions
この関数はODBC API SQLGetFunctionsに対応します。これはLevel 1 API 呼び出しで、サポートされているドライバ関数を返します。これがどのように呼ばれるかによって、true/false値の100個の要素をもった配列iを返すか、1つのtrue/false値を返します。もしSQL_API_ALL_FUNCTIONS (0)で呼ばれたら、100要素の配列を返します。そうでなければ、関数を参照する数字を渡します。(このことについてのヘルプはODBCドキュメントをご覧下さい)
SQLColumns
この関数をサポートすることはバージョン0.17で加えられましたが、私が持っているODBCドライバを使って正しくテスト出来ていません。OracleもAccessも両方とも、これをサポートしていません。けれどもこれは適切に失敗するとはいえますが...。<G>
その他/やること?
Level 1
    SQLColumns  
    SQLSpecialColumns
    SQLStatistics
    SQLTables (use tables()) call

Level 2

    SQLColumnPrivileges
    SQLForeignKeys
    SQLPrimaryKeys
    SQLProcedureColumns
    SQLProcedures
    SQLTablePrivileges
    SQLDataSources
    SQLDrivers
    SQLNativeSql

Win32上のWebサーバでのDBD::Adabasの使い方

Webデータベース・アクセスについての一般的なコメント
これは実際にはDBIでよくある質問です。しかしWin32/ODBCではなにか一癖あるようです。

典型的には、WebサーバーはNTサービスまたはWindows95/98サービスとしてインストールされます。これは典型的には、Webサーバー自体はWeb開発者とは同じ環境、同じ許可を持っていないことを意味します。この状況は、もちろん、Unix サーバにも当てはまります。しかし、Win32上では、問題は普通ちょっと違うのです。

 
DSNの定義 -- どのタイプを使えばよいか?
Win32上では、注意してDSNを、ユーザDSNではなく、システムとして定義して下さい。システムDSNは"グローバル"であり、一方、ユーザはユーザにローカルです。典型的には、上記で述べたようにWebサーバはWeb開発者とは違うユーザで"ログイン"されているのです。これは、コマンドラインでは正常に動くのに、Webサーバから呼び出すと失敗するのはなぜかという状況を起こしたがります。
 
DSNの定義 -- 注意深くファイルそのものをを選ぶことは重要!
ファイルをベースとしたドライバにとっては、クライアント・サーバドライバに比べて、ファイルのパスはとても重要です。気にしなければならないことはそれほど多くありません。これは例えばMS Accessデータベースにも当てはまります。

1) ファイルがNTFSパーティションにあれば、Webサービスユーザがそのファイルにアクセスできる権限を持っているかを確認して下さい。

2) ファイルがリモート・コンピュータにあるならば、Webサービスユーザがそのファイルにアクセスする権限を持っているかをチェックしてください。

3) そのファイルがリモート・コンピュータにあるならば、「X:\」という書き方ではなく、そのファイルのUNCパスを使ってみて下さい。これは、サービスが完全に同じアクセス許可をを取らない、さらに重要なことは、ドライバ文字そのものはマシンにグローバルであることからとても重要になりえます。つまりサービスがZ:にアクセスしようとすると、その時点でそのマシンにログインしたユーザにZ:が依存してしまいます。(サービスを開発している間、これについてテストしてきました。--これは醜く、コストがかかる割に価値がありません)

残念なことに、私が持っているAccess ODBCドライバはUNCパスを指定することを許して折らず、X:\という書き方だけを許しています。これを回避するにはすくなくとも1つの方法があります。最も簡単な方法は、多分、Regeditを使って、HKYE_LOCALUSERS\SOFTWARE\ODBC\"あなたのDSN"に行くことです(もちろんシステムDSNをだと仮定しています)。いくつかの設定があり、それは典型的にはドライバを特定するものです。Accessドライバにとって変更する重要な値は、例えばDBQという値です。これは実際にはAccessデータベースのファイル名になります。


リンク集(適当に)

これらはソートして、加えなければいけないのですが...。いくつかはODBC開発者にだけ関係しています。(でもそれらを削りたくありません)。

        http://www.ids.net/~bjepson/freeODBC/index.html
        http://dataramp.com/
        http://www.openlink.co.uk
        http://www.syware.com

ホーム Perlの小技

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