7.5. ApplixWare #
ApplixWare有一个至少在部分平台上受到支持的ODBC数据库接口。在 Linux 下,已经演示过 ApplixWare 4.4.2 通过 PostgreSQL发行版中包含的 psqlODBC驱动与 PostgreSQL 7.0 配合工作。
7.5.1. 配置
ApplixWare必须被正确配置,才能访问 PostgreSQL的ODBC 软件驱动。
启用ApplixWare数据库访问
这些说明针对的是Linux上的 ApplixWare 4.4.2 版。更详细的信息请参阅Linux Sys Admin在线图书。
你必须修改
axnet.cnf,让elfodbc能找到libodbc.so(ODBC驱动管理器)共享库。这个库随 ApplixWare发行版一起提供,但axnet.cnf需要被修改为指向正确的位置。以 root 身份编辑文件
。applixroot/applix/axdata/axnet.cnf在
axnet.cnf的底部,找到以#libFor elfodbc /ax/
...把这一行改为
libFor elfodbc
applixroot/applix/axdata/axshlib/lib这会告诉
elfodbc到这个目录中查找 ODBC支持库。通常 Applix安装在/opt,因此完整路径是/opt/applix/axdata/axshlib/lib,但如果你把 Applix安装在了其他地方,请相应地修改路径。
按照第 7.3 节中的说明创建
.odbc.ini。你可能还想加上标志TextAsLongVarchar=0
加到
.odbc.ini的数据库特定部分,这样文本字段就不会显示为**BLOB**。
测试ApplixWare ODBC 连接
启动Applix Data
选择你感兴趣的PostgreSQL数据库。
选择 → 。
选择,然后点击 。你在
.odbc.ini中配置的数据库应该会被显示出来。确保Host: 字段为空(如果不为空,axnet会试图联系另一台机器上的axnet来查找数据库)。在弹出的框中选择数据库,然后点击。
在登录标识对话框中输入用户名和口令,然后点击。
你应该会在数据窗口左下角看到 Starting elfodbc server。如果你得到一个错误对话框,请参见下面的调试一节。
“Ready”消息会出现在数据窗口左下角。这表示你现在可以输入查询了。
从 → 中选择一张表,然后选择 → 来访问数据库。表中前 50 行左右应该会出现。
7.5.2. 常见问题
在试图通过Applix Data建立 ODBC连接时可能出现下列消息:
-
Cannot launch gateway on server elfodbc找不到libodbc.so。检查你的axnet.cnf。Error from ODBC Gateway: IM003::[iODBC][Driver Manager]Specified driver could not be loadedlibodbc.so找不到.odbc.ini中列出的驱动。核对设置。-
Server: Broken Pipe 驱动进程由于某种其他问题已经终止。你可能没有最新版本的 PostgreSQL ODBC包。
-
setuid to 256: failed to launch gateway ApplixWare 4.4.1 的九月版(第一个在 Linux 下正式支持ODBC的版本)在用户名长度超过八(8)个字符时会出问题。问题描述由 Steve Campbell(
<scampbell@lear.com>)提供。
作者
由 Steve Campbell(<scampbell@lear.com>)供稿,1998-10-20
axnet程序的安全系统看起来有点可疑。 axnet代表用户做事,在一个真正的多用户系统上它确实应该以 root 权限运行(这样它才能在每个用户的目录中读写)。不过我不太愿意推荐这样做,因为我们完全不知道这会打开什么安全漏洞。
7.5.3. 调试ApplixWare ODBC 连接
调试连接问题的一个好工具是 Unix 系统实用程序 strace。
用strace调试
启动ApplixWare。
对
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检查
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 Data Tutorial,你需要创建教程中引用的示例表。用于创建这些表的 ELF 宏试图在许多数据库列上使用 NULL 条件,而PostgreSQL 目前不允许这样做。
要绕开这个问题,你可以这样做:
修改ApplixWare演示
把
/opt/applix/axdata/eng/Demos/sqldemo.am复制到一个本地目录。编辑这份
sqldemo.am的本地副本:搜索
null_clause = "NULL"。把它改为
null_clause = ""。
启动Applix Macro Editor。
从Macro Editor中打开
sqldemo.am文件。选择 → 。
退出Macro Editor。
启动Applix Data。
选择 → 。
输入值
sqldemo,然后点击。你应该能在数据窗口的状态行(左下角)看到进度。
现在你应该可以访问演示表了。
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
小心
对于任何包含用户名和口令信息的文件,你都应当小心设置文件保护。