2012-04-30 25 views
1

我想嘗試定義架構來設置庫的列表,我可以在其中搜索查詢sql的表。odbc_connect set DefaultSchema

在momenti我可以用這個字符串連接上我的DB2連接到IBMi:

$user = 'USER'; 
$password = 'PWD'; 
$hostname = '192.168.1.100'; 
$db = 'S6528B5A'; 
$conn_string = "DRIVER={iSeries Access ODBC Driver}; 
       SYSTEM=$hostname; 
       PROTOCOL=TCPIP; 
       UID=$user; 
       PWD=$password; 
       DATABASE=$db; 
       DefaultSchema={LIB1,LIB2};"; 

連接建立成功,我得到資源ID#3,但是當我嘗試執行SQL查詢:

$sql = 'SELECT * FROM FILE1'; 
$rows = odbc_exec($conn, $sql); 

我得到一個錯誤的SQL狀態S0002在文件中找不到(好象尋找在錯誤的庫中的文件,在庫打開連接相同的用戶名搜索)

如何在第一個連接上設置我的環境並執行查詢?

回答

3

使用此連接字符串,使系統的命名,並沒有設置默認庫:

$conn_string = "DRIVER={iSeries Access ODBC Driver}; 
    SYSTEM=$hostname; 
    PROTOCOL=TCPIP; 
    UID=$user; 
    PWD=$password; 
    Naming=1; 
    DefaultSchema=,LIB1,LIB2;"; 

Client Access ODBC: Default Libraries Setting

ODBC connection string keywords

摘錄相關部分是:

With SQL命名約定,操作系統不執行庫列表搜索以查找未限定的對象。如果定義了默認集合,則使用默認集合來解析非限定SQL語句。

...

隨着SYS命名約定,不合格的SQL語句去默認集合。如果沒有默認集合,則使用當前庫。如果未指定當前庫,則使用庫列表。

...

默認集合

任務屬性通過ODBC確定處理含有不合格的SQL名的SQL語句時使用的庫設置。如果設置了默認集合,則除過程,函數和類型之外的所有非限定對象都必須駐留在默認集合中,而不管命名約定如何。

...

我怎樣才能ODBC搜索庫列表?

如上所述,編輯ODBC數據源並將系統命名設置爲SYS。默認庫必須爲空,或者在R510以前的版本中,默認庫設置必須以逗號開頭,以便不定義默認集合(例如,「,MYLIB1,MYLIB2」)。


Odbc connection string format, not finding files

相關問題