$PBExportHeader$uo_databaseinfo.sru forward global type uo_databaseinfo from nonvisualobject end type end forward global type uo_databaseinfo from nonvisualobject autoinstantiate end type forward prototypes public function integer uof_get_dbinfo (transaction arg_transaction, ref integer arg_hisflag, ref string arg_superpsw, ref string arg_prg_id, string arg_cur_version, ref string arg_msg) public function integer uof_set_dbinfo (transaction arg_transaction, integer arg_hisflag, ref string arg_msg) public function integer uof_set_superpsw (string arg_superpsw, ref string arg_msg) public function integer uof_set_hisdb (ref string arg_msg) end prototypes public function integer uof_get_dbinfo (transaction arg_transaction, ref integer arg_hisflag, ref string arg_superpsw, ref string arg_prg_id, string arg_cur_version, ref string arg_msg);//取数据库定义资料 Int rslt = 1 Long cnt String tmp_sconfig 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.hisflag, sys_DB_version.superpsw, sys_DB_version.prg_id, sys_DB_version.cur_version INTO :arg_hisflag, :arg_superpsw, :arg_prg_id, :arg_cur_version FROM sys_DB_version USING arg_transaction; IF arg_transaction.SQLCode <> 0 THEN arg_msg = '查询当前数据库资料失败,请与供应商联系!' rslt = 0 GOTO ext END IF //检查数据串是否合理 IF sys_system_id + sys_power_key <> f_psw_bczh(tmp_sconfig,1,sys_power_key) 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) //messagebox('',arg_cur_version) 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 = '' 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 public function integer uof_set_dbinfo (transaction arg_transaction, integer arg_hisflag, ref string arg_msg);//设定数据库资料 Int rslt = 1 Long cnt String tmp_sconfig,tmp_superpsw,tmp_ffpsw String ls_sys_prg_id,ls_sys_cur_version tmp_ffpsw = f_psw_bczh(sys_system_id ,0,sys_power_key) tmp_sconfig = f_psw_bczh(sys_system_id + sys_power_key ,0,sys_power_key) tmp_superpsw = f_psw_bczh('supersupersuper' ,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_cur_version,0,sys_power_key) INSERT INTO sys_DB_version( Prg_id, Ori_version, cur_version, hisflag, superpsw) VALUES (:ls_sys_prg_id, :ls_sys_cur_version, :ls_sys_cur_version, :arg_hisflag, :tmp_superpsw) USING arg_transaction; IF arg_transaction.SQLCode <> 0 THEN arg_msg = '定义数据库资料失败' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_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 uof_set_hisdb (ref string arg_msg);//设置历史数据库 Int rslt = 1 UPDATE sys_DB_version Set hisflag = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '设置历史数据库失败' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function on uo_databaseinfo.create call super::create TriggerEvent( this, "constructor" ) end on on uo_databaseinfo.destroy TriggerEvent( this, "destructor" ) call super::destroy end on