如何在Uniface 9.7中对Informix数据库发起请求并查询指定数据?
在Uniface 9.7中连接Informix并执行指定查询操作
一、先完成Informix数据库连接配置
1. 配置Informix ODBC数据源
确保已安装Informix ODBC Driver(推荐3.7及以上兼容版本),然后通过系统ODBC数据源管理器创建系统DSN:
- 选择Informix ODBC Driver,填写数据源名称(例如
INFORMIX_PERSON_DB) - 指定Informix服务器地址、数据库名、端口,以及数据库用户名和密码
- 测试连接,确认能正常访问目标数据库
2. 配置Uniface Assignment文件
修改Uniface的usys.asn(或自定义业务asn文件),添加以下配置:
[DRIVER_SETTINGS] ; 配置Informix ODBC驱动适配 INFORMIX=ODBC [PATHS] ; 绑定数据库连接到$DB变量,替换为你创建的ODBC数据源名 $DB=ODBC:INFORMIX_PERSON_DB
3. 验证连接
打开Uniface IDE的Database Manager,选择配置好的$DB连接,确认能看到person表,确保连接生效。
二、实现查询id=5的person记录
以下提供两种常用实现方式:
方式1:基于Uniface实体(推荐标准做法)
步骤1:创建对应person表的实体
在Uniface中创建实体PERSON,映射数据库表字段:
- 字段
id:类型为NUMBER,对应数据库INT类型 - 字段
name:类型为STRING,对应数据库VARCHAR类型 - 字段
age:类型为NUMBER,对应数据库INT类型 - 设置实体的
DBMS属性为INFORMIX,连接使用$DB
步骤2:编写查询代码
在服务组件(Service Component)或表单的触发逻辑中写入以下代码:
; 清空实体当前缓存记录 clear PERSON ; 设置查询条件:id=5 PERSON.id = 5 ; 执行查询 retrieve PERSON ; 判断查询结果 if ($status = 0) then ; 查询成功,输出字段值 message "查询结果:Name=" || PERSON.name || ", Age=" || PERSON.age else ; 未找到匹配记录 message "未找到id=5的person记录" endif
方式2:使用动态SQL(灵活场景)
如果不需要依赖实体,可直接用动态SQL执行查询:
; 定义带参数的SQL语句 v_sql = "SELECT name, age FROM person WHERE id = ?" ; 准备SQL语句 prepare stmt_person from v_sql ; 设置参数(占位符?对应的值为5) set param 1 to 5 ; 执行查询并将结果存入变量 execute stmt_person into v_name, v_age ; 处理结果 if ($status = 0) then message "查询结果:Name=" || v_name || ", Age=" || v_age else message "未找到id=5的person记录" endif ; 释放SQL语句资源 release stmt_person
注意事项
- 确保实体字段类型与数据库表字段类型严格匹配,避免类型转换错误
- 多用户场景下,需配合
start transaction、commit/rollback处理事务 - 若出现连接或查询错误,可通过Uniface的
$procerror和$procerrorcontext变量排查具体问题
内容的提问来源于stack exchange,提问作者Mi2830
相关产品推荐
相关产品推荐

