$PBExportHeader$uo_getdbinfo.sru forward global type uo_getdbinfo from nonvisualobject end type end forward global type uo_getdbinfo from nonvisualobject end type global uo_getdbinfo uo_getdbinfo forward prototypes public function integer set_superpsw (string arg_superpsw, ref string arg_msg) public function integer set_dbinfo (transaction arg_transaction, integer arg_hisflag, integer arg_switchflag, ref string arg_msg) public function integer get_dbinfo (transaction arg_transaction, ref integer arg_hisflag, ref string arg_superpsw, ref string arg_prg_id, ref string arg_cur_version, ref integer arg_switchflag, ref string arg_switchpsw, ref string arg_msg) end prototypes public function integer set_superpsw (string arg_superpsw, ref string arg_msg);//设定超级密码 int rslt = 1 arg_superpsw = f_psw_bczh(arg_superpsw ,0,sys_power_key) String psw[],ls_psw Long ls_i,it_mxt DECLARE cur_scid CURSOR FOR SELECT u_user.psw FROM u_user ; OPEN cur_scid; FETCH cur_scid INTO :ls_psw; DO WHILE sqlca.SQLCode = 0 it_mxt++ psw[it_mxt] = ls_psw FETCH cur_scid INTO :ls_psw; LOOP close cur_scid; for ls_i = 1 to it_mxt if arg_superpsw = psw[ls_i] then arg_msg ='设定的超级密码与用户密码相同' rslt = 0 goto ext end if next UPDATE sys_DB_version Set superpsw = :arg_superpsw; IF sqlca.SQLCode <> 0 THEN arg_msg = '设定超级密码失败' rslt = 0 goto ext END IF ext: if rslt = 0 then rollback; elseif rslt = 1 then commit; end if return rslt end function public function integer set_dbinfo (transaction arg_transaction, integer arg_hisflag, integer arg_switchflag, ref string arg_msg);//设定数据库资料 Int rslt = 1,cnt String ls_superpsw,ls_sys_prg_id,ls_sys_cur_version ls_superpsw = f_psw_bczh(sys_superpsw,0,sys_power_key) ls_sys_prg_id = f_psw_bczh(sys_prg_id,0,sys_power_key) ls_sys_cur_version = f_psw_bczh(sys_Allow_version,0,sys_power_key) INSERT INTO sys_DB_version (Prg_id, Ori_version, cur_version, Update_dt, superpsw, hisflag, switchflag ) VALUES (:ls_sys_prg_id, :ls_sys_cur_version, :ls_sys_cur_version, getdate(), :ls_superpsw, :arg_hisflag, :arg_switchflag) USING arg_transaction; IF arg_transaction.SQLCode <> 0 THEN arg_msg = '定义数据库资料失败' rslt = 0 GOTO ext END IF COMMIT; ext: RETURN rslt end function public function integer get_dbinfo (transaction arg_transaction, ref integer arg_hisflag, ref string arg_superpsw, ref string arg_prg_id, ref string arg_cur_version, ref integer arg_switchflag, ref string arg_switchpsw, ref string arg_msg);//取数据库定义资料 Int rslt = 1,cnt Int li_versiontype SELECT count(*) INTO :cnt FROM sys_DB_version USING arg_transaction; IF arg_transaction.SQLCode <> 0 THEN arg_msg = '查询数据库资料失败,请与龙嘉软件联系!' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '数据库资料被手动破坏,请与龙嘉软件联系!' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '数据还未有定义,请先定义数据库' rslt = -1 GOTO ext END IF SELECT sys_DB_version.prg_id, sys_DB_version.hisflag, sys_DB_version.superpsw, sys_DB_version.cur_version, sys_DB_version.switchflag, sys_DB_version.switchpsw INTO :arg_prg_id, :arg_hisflag, :arg_superpsw, :arg_cur_version, :arg_switchflag, :arg_switchpsw FROM sys_DB_version USING arg_transaction; IF arg_transaction.SQLCode <> 0 THEN arg_msg = '查询当前数据库资料失败,请与龙嘉软件联系!' rslt = 0 GOTO ext END IF arg_superpsw = f_psw_bczh(arg_superpsw,1,sys_power_key) arg_prg_id = f_psw_bczh(arg_prg_id,1,sys_power_key) arg_cur_version = f_psw_bczh(arg_cur_version,1,sys_power_key) arg_switchpsw = f_psw_bczh(arg_switchpsw,1,sys_power_key) IF arg_prg_id <> sys_prg_id THEN arg_msg = '数据库资料被恶意破坏或当前连接的数据库不是本系统的数据库,请与龙嘉软件联系!' rslt = 0 GOTO ext END IF IF arg_cur_version < sys_Allow_version THEN arg_msg = '当前数据库资料版本太低不能应用新程序,请与龙嘉软件联系!' rslt = 0 GOTO ext END IF IF arg_cur_version >= sys_Allow_version THEN IF arg_cur_version < sys_cur_version THEN arg_msg = '升级数据库版本' rslt = -2 GOTO ext END IF END IF ext: RETURN rslt end function on uo_getdbinfo.create call super::create TriggerEvent( this, "constructor" ) end on on uo_getdbinfo.destroy TriggerEvent( this, "destructor" ) call super::destroy end on