如何在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
相关产品推荐
相关产品推荐

