7.5. ApplixWare

ApplixWare 有一个 ODBC 数据库接口,至少在一些平台上是可以用的. 我们已经在 Linux 平台的 ApplixWare 4.4.2 上试验过 Postgres 7.0 和它带的 psqlODBC 驱动.

7.5.1. 配置

必须正确配置 ApplixWare,以便让它能够访问 Postgres ODBC 驱动软件.

允许 ApplixWare 访问数据库

这些指导信息适用于 Linux 上的 4.4.2 ApplixWare.请参考 Linux 系统管理 在线手册获取更详细的信息.

  1. 你必须修改 axnet.cnf 以便于 elfodbc 可以找到 libodbc.soODBC 驱动管理器)共享库. 这个库包含在 ApplixWare 发布版本里,但是要修改 axnet.cnf 指向正确的位置.

    以 root 身份编辑文件 applixroot/applix/axdata/axnet.cnf.

    1. axnet.cnf 的底部,找出以下面文字开头的一行

      #libFor elfodbc /ax/...
      	 

    2. 把这一行改成

      libFor elfodbc applixroot/applix/axdata/axshlib/lib
      	 
      告诉 elfodbc 在这个路径里查找 ODBC 支持库. 通常 Applix 被装在 /opt ,这样完整的路径就是 /opt/applix/axdata/axshlib/lib, 但如果你在其他地方安装了 Applix ,相应的修改路径.

  2. 创建上面描述的 .odbc.ini .你可能还要增加标志

    TextAsLongVarchar=0
           
    .odbc.ini 的数据库声明部分,这样文本字段就不会显示为 **BLOB**

测试 ApplixWare ODBC 联接

  1. 运行 Applix Data

  2. 选择感兴趣的 Postgres 数据库.

    1. 选择 Query->Choose Server

    2. 选择 ODBC,并且敲击 Browse. 你在 .odbc.ini 里配置的数据库应该显示出来. 确保 Host: field 是空的(如果不是, axnet 将试图与另一台机器的 axnet 联接查找数据库).

    3. 选择敲击 Browse 示出的数据库,然后敲击 OK

    4. 在登录标识对话框里输入 username(用户名)和 password (口令). 然后敲击 OK

    你应该看到在数据窗口左下脚有 "Starting elfodbc server" (启动 elfodbc 服务器)字样. 如果弹出一个错误对话框,参考下面的调试章节.

  3. 'Ready'(就绪)信息将在数据窗口的左下角出现.这表明你现在可以输入查询.

  4. 从 Query->Choose tables 选择一个表, 然后选择 Query->Query 来访问该数据库. 表的头 50 行左右的信息将显示出来.

7.5.2. 常见问题

在尝试通过Applix Data 建立一个 ODBC 联接时 可能出现下面的信息:

Cannot launch gateway on server (无法在服务器上建立网关)

elfodbc can't find libodbc.so. Check your axnet.cnf. (elfodbc 无法找到 libodbc.so.检查你的axnet.cnf.)

Error from ODBC Gateway: IM003::[iODBC][Driver Manager]Specified driver could not be loaded

libodbc.so cannot find the driver listed in .odbc.ini. Verify the settings. (libodbc.so 找不到 .odbc.ini里列出的驱动.检查设置.)

Server: Broken Pipe

The driver process has terminated due to some other problem. You might not have an up-to-date version of the Postgres ODBC package. ( 驱动进程因为其他原因结束的.你可能拿的不是最新的 Postgres ODBC 软件包. )

setuid to 256: failed to launch gateway

九月发布的 ApplixWare v4.4.1(第一个有 Linux 下官方支持的 ODBC )在用户名超过八(8)字符 长时有问题.这个问题是 Steve Campbell () 发现的.

作者: 由 Steve Campbell () 在 1998-10-20 提交.

axnet 程序的安全系统看起来有一点奇怪. axnet 代理用户的事务, 因而在一个真正的多用户系统它应该以 root 权限 (这样它可以读/写每个用户的目录). 我对建议这样做有些犹豫,因为我们不知道这样会引起什么样的安全漏洞.

7.5.3. 调试 ApplixWare ODBC 联接

一个调试联接问题的很好的 Unix 系统工具是 strace

用 strace 调试

  1. 启动 applixware.

  2. 在 axnet 进程上运行一个 strace .例如,如果

    % ps -aucx | grep ax 
           
    显示
    cary   10432  0.0  2.6  1740   392  ?  S  Oct  9  0:00 axnet
    cary   27883  0.9 31.0 12692  4596  ?  S   10:24  0:04 axmain
           

    那么运行

    % strace -f -s 1024 -p 10432
           

  3. 检查 strace 输出.

    来自 Cary 的提示: 许多从 ApplixWare 来的错误信息输出到 stderr,但是我不能确定 stderr 发送到哪里,所以 strace 是把它们找出来的方法.

例如,在得到一个 "Cannot launch gateway on server", ,我在 axnet 上运行 strace 并且得到

[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
can't load library 'libodbc.so'\n", 61) = -1 EIO (I/O error)
     
所以发生的错误是 applix elfodbc 在查找 libodbc.so,但是找不到. 这就是为什么 axnet.cnf 需要修改的原因.

7.5.4. 运行 ApplixWare 演示

为了通过 ApplixWare 数据教程,你需要创建教程提到的样例表. 所用的创建表的 ELF 宏试图在许多数据库字段上使用一个 NULL 条件,而目前 Postgres 不允许这些选项.

要绕开这些问题,你可以按下面方法做:

修改 ApplixWare 演示

  1. 拷贝 /opt/applix/axdata/eng/Demos/sqldemo.am 到一个本地目录.

  2. 编辑本地 sqldemo.am 的拷贝:

    1. 查找 'null_clause = "NULL"

    2. 把这些改为 null_clause = ""

  3. 运行 Applix Macro Editor.

  4. Macro Editor 里打开 sqldemo.am 文件.

  5. 选择 File->Compile and Save

  6. 退出 Macro Editor

  7. 运行 Applix Data

  8. 选择 *->Run Macro

  9. 输入值 "sqldemo",然后敲击 OK

    你应该看到数据窗口状态栏的的进度(在左下角).

  10. 你现在应该可以访问 demo 表.

7.5.5. 有用的宏

你可以向你的标准 Applix 启动宏文件里增加关于你的数据库登录和口令的信息.这是一个例子文件 ~/axhome/macros/login.am

macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro
     

Caution

对任何含有用户名和口令信息的文件你都要仔细保护.