1

我想尝试定义架构以设置库列表,我可以在其中搜索进行查询 sql 的表。

目前,我可以使用以下字符串连接将我的 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 找不到文件(好像在错误的库中搜索文件,在打开连接的相同用户名的库中搜索)

如何在第一次连接时设置我的环境而不是执行查询?

4

1 回答 1

3

使用此连接字符串来启用系统命名并且不设置默认库:

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

客户端访问 ODBC:默认库设置

ODBC 连接字符串关键字

相关部分摘录如下:

使用 SQL 命名约定,操作系统不会执行库列表搜索来定位不合格的对象。如果定义了默认集合,则默认集合用于解析不合格的 SQL 语句。

...

使用 SYS 命名约定,不合格的 SQL 语句将转到默认集合。如果没有默认集合,则使用当前库。如果未指定当前库,则使用库列表。

...

默认集合

由 ODBC 设置的作业属性,用于确定在处理包含非限定 SQL 名称的 SQL 语句时使用的库。设置默认集合时,除过程、函数和类型之外的所有非限定对象都必须驻留在默认集合中,而不管命名约定如何。

...

如何让 ODBC 搜索库列表?

如上所述,编辑 ODBC 数据源并将系统命名设置为 SYS。默认库必须为空,或者在早于 R510 的版本上,默认库设置必须以逗号开头,以便未定义默认集合(例如,“,MYLIB1,MYLIB2”)。


odbc连接字符串格式,找不到文件

于 2012-04-30T16:17:09.823 回答