[PHP-users 29417] AS400でのODBCでのアクセス方法(点つきテーブル名)

柴田 健郎 takeofuture @ hotmail.com
2006年 6月 15日 (木) 03:08:39 JST


以前、お世話になりました
さて以前は接続に成功したものの
PERFORMANCEが遅くてあきらめていたAS400 DB2への
ODBC経由でもデータアクセスですが、LINUXのほうのVERSION更新
にともない、性能も向上しました

ところが最近、障害があることがわかりました
テーブル名に . (ピリオド)が含まれているのです。

ピリオドなしだとうまくいくのですが・・・
メインでつかっているレガシーシステムなのでテーブル名変更はリスクが大きく
なんとかPHPのODBC関数で対応できないかも作中です

odbc.ini は
[AS400]
Description     = iSeries Access ODBC Driver
Driver          = iSeries Access ODBC Driver
System          = xxx.xxx.xxx.xxx
UserID          = ID
Password        = PASS
Naming          = 0
DefaultLibraries        = MYLIB
Database                =
ConnectionType          = 2
CommitMode              = 2
ExtendedDynamic         = 1
DefaultPkgLibrary       = MYLIB
DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression    = 1
LibraryView             = 0
AllowUnsupportedChar    = 1
ForceTranslation        = 1
Trace           = 0

です
でPHPは
==========================================
$db = odbc_connect("AS400","ID","PASS") or 
die(odbc_error().":".odbc_errormsg());
print "接続OK\n";
$cur=odbc_exec($db,"select sitencd,syouhinnid from MYLIB.syouhin where 
sitencd='TY'");
while(odbc_fetch_row($cur))
{
        $sitencd=odbc_result($cur,1);
        $syouhincd=odbc_result($cur,2);
        print ("$sitencd\n");
        print ("$syouhincd\n");
}
odbc_close($db);
=======================================
では問題ないですが

syouhin テーブルを syouhin.1 に改名してテストすると
エラーになります(改名はテスト目的で、そのテストの目的はリアルタイムでうごい
ている
これ以外の重要なテーブルはすべて点つき名であるからです)。

この点つき名テーブル、ODBC経由でMS Accessでテーブルをリンクすると問題なく
テーブルやデータを引っ張ってきますし

phpのodbc関数でも
odbc_tables --  指定したデータソースに保存されたテーブルの名前のリストを取得
するものや 
を使用するとテーブル名 syouhin.1 はもってこれます.
=============================================
   $cnx = odbc_connect("AS400","ID","PASS");
   $res400= odbc_columns($cnx,"AS400","","syouhin.1");
   echo odbc_result_all($res400); 
   odbc_close($cnx);
============================================

そこで質問なのですが
1. 実際にクエリー"select a,v fromMYLIB.syouhin.1 "などをつかわずにこの
盛ってきたテーブル名を
   利用してそれをOPENするような処理は可能なのでしょうか?
   つまりこのテーブルOBJECTを開く方法(データにアクセスする方法)
   はあるのでしょうか?

2.   1がだめなら使用しているMYSQL自体にAS400 DB2からリンクをとり方法はある
のでしょうか?
   ACCESSからMYSQLへのLINKのはりかたのマニュアルはたくさんありましたが
   MYSQLからLINKのはりかたがなかなかみつかりません

3.  あるいはよりAS400よりの質問になりますが
   PHPの関数のなかでodbc_columns($cnx,"AS400","","syouhin.1");
      では点つきテーブルを認識しているのに
   sql select * from MYLIB.syouhin.1 ではうまくいかないということは
   なんにか文字をおいてやればいいのでしょうか?
   select * from MYLIB.\syouhin.1\にように..

すみません、なにかヒントをご存知でしたら教えてください

どうかよろしくお願いいたします


  

MYLIB.syouhin

_________________________________________________________________
迷惑メールやウイルスへの対策も万全「MSN Hotmail」 
http://promotion.msn.co.jp/hotmail/ 



PHP-users メーリングリストの案内