[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 メーリングリストの案内