You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle Forms中调用ocx对接指纹人脸扫描设备获取员工ID

操作步骤
  • 在表单画布添加OCX控件:打开Forms Builder的对象导航器,定位到目标表单,在「块」下新建一个控制块,在对应画布上添加OLE容器,选择设备对应的zkemkeeper OCX控件,将该控件命名为CTRL_ZKEM。
  • 初始化设备连接:在表单的WHEN-NEW-FORM-INSTANCE触发器中调用生成的zkemkeeper_IZKEM包的连接方法,示例代码如下:
DECLARE
    v_connect_res BOOLEAN;
BEGIN
    -- 方法参数根据你设备的实际IP、端口、设备号修改
    v_connect_res := zkemkeeper_IZKEM.CONNECT_NET(
        interface => :CTRL_ZKEM.interface,
        IPAdd => '192.168.1.201',
        Port => 4370,
        MachineNumber => 1
    );
    IF v_connect_res THEN
        -- 注册实时事件监听,开启扫描事件捕获
        zkemkeeper_IZKEM.REG_EVENT(interface => :CTRL_ZKEM.interface, EventMask => 65535);
        MESSAGE('设备连接成功');
    ELSE
        MESSAGE('设备连接失败,请检查网络或设备状态');
    END IF;
END;
  • 绑定事件回调获取员工ID:找到生成的zkemkeeper_ZKEM_EVENTS包体,修改OnAttTransaction或OnFinger这类扫描成功的事件方法,添加字段赋值逻辑,示例代码如下:
PROCEDURE OnAttTransaction(
    interface OLEOBJ,
    EnrollNumber VARCHAR2,
    IsInValid BINARY_INTEGER,
    AttState BINARY_INTEGER,
    VerifyMethod BINARY_INTEGER,
    Year BINARY_INTEGER,
    Month BINARY_INTEGER,
    Day BINARY_INTEGER,
    Hour BINARY_INTEGER,
    Minute BINARY_INTEGER,
    Second BINARY_INTEGER,
    WorkCode BINARY_INTEGER
) IS
BEGIN
    -- EnrollNumber即为设备存储的员工ID,直接赋值给表单对应字段
    IF IsInValid = 0 THEN -- 仅处理有效验证结果
        :EMP_BLOCK.EMP_ID := EnrollNumber;
        -- 可按需补充查询、提交逻辑,例如按员工ID查询带出完整员工信息
        EXECUTE_QUERY;
    END IF;
END OnAttTransaction;
  • 补充设备断开逻辑:在表单的WHEN-FORM-NAVIGATE-EXIT触发器中调用断开连接方法,避免设备连接泄漏,示例代码如下:
BEGIN
    zkemkeeper_IZKEM.DISCONNECT(interface => :CTRL_ZKEM.interface);
END;
注意事项
  • 不同厂商SDK的方法名、参数存在差异,如果你生成的包内方法名和上述示例不一致,直接替换为你包中对应的连接、注册事件、事件回调方法即可
  • 若使用USB连接设备,将CONNECT_NET方法替换为SDK对应的USB连接方法即可
  • Oracle Forms 10g运行客户端需要提前安装并注册对应OCX控件,否则会抛出OLE初始化错误,注册方法为管理员身份运行CMD,执行regsvr32 你的OCX文件完整路径

内容的提问来源于stack exchange,提问作者Zedan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:15:03