|
|
ApplixWare
有一个
ODBC
数据库接口,至少在一些平台上是可以用的.
我们已经在 Linux 平台的
ApplixWare
4.4.2
上试验过
PostgreSQL
7.0
和它带的
psqlODBC
驱动.
必须正确配置
ApplixWare
,以便让它能够访问
PostgreSQL
ODBC
驱动软件.
允许
ApplixWare
访问数据库
这些指导信息适用于
Linux
上的
ApplixWare
4.4.2.请参考
Linux 系统管理
在线手册获取更详细的信息.
-
你必须修改
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
,相应的修改路径.
-
创建
Section 7.3
描述的
.odbc.ini
.你可能还要增加标志
TextAsLongVarchar=0
到
.odbc.ini
的数据库声明部分,这样文本字段就不会显示为
**BLOB**
。
测试
ApplixWare
ODBC 联接
-
运行
Applix Data
-
选择感兴趣的
PostgreSQL
数据库.
-
选择
->
.
-
选择
,并且敲击
Browse
.
你在
.odbc.ini
里配置的数据库应该显示出来.
确保
Host:
是空的(如果不是,
axnet
将试图与另一台机器的
axnet
联接查找数据库).
-
选择敲击
Browse
示出的数据库,然后敲击
OK
.
-
在登录标识对话框里输入 username(用户名)和 password (口令).
然后敲击
OK
.
你应该看到在数据窗口左下脚有
Starting elfodbc server
(启动 elfodbc 服务器)字样.
如果弹出一个错误对话框,参考下面的调试章节.
-
"Ready"
(就绪)信息将在数据窗口的左下角出现.
这表明你现在可以输入查询.
-
从
->
选择一个表,
然后选择
->
来访问该数据库.
表的头 50 行左右的信息将显示出来.
在尝试通过
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
PostgreSQL
ODBC
package.
(
驱动进程因为其他原因结束的.你可能拿的不是最新的
PostgreSQL
ODBC
软件包.
)
-
setuid to 256: failed to launch gateway
-
九月发布的
ApplixWare
4.4.1
(第一个有 Linux 下官方支持的
ODBC
)在用户名超过八(8)字符
长时有问题.这个问题是
Steve Campbell
(
<
scampbell@lear.com
>
)
发现的.
axnet
程序的安全系统看起来有一点奇怪.
axnet
代理用户的事务,
因而在一个真正的多用户系统它应该以 root 权限
(这样它可以读/写每个用户的目录).
我对建议这样做有些犹豫,因为我们不知道这样会引起什么样的安全漏洞.
一个调试联接问题的很好的 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
需要修改的原因.
为了通过
ApplixWare 数据教程
,你需要创建教程提到的样例表.
所用的创建表的 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
",然后敲击
OK
.
你应该看到数据窗口状态栏的的进度(在左下角).
-
你现在应该可以访问 demo 表.
你可以向你的标准 Applix
启动宏文件里增加关于你的数据库登录和口令的信息.这是一个例子文件
~/axhome/macros/login.am
∶
macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro
Caution
|
对任何含有用户名和口令信息的文件你都要仔细保护.
|
|