uo_databaseinfo.sru 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. $PBExportHeader$uo_databaseinfo.sru
  2. forward
  3. global type uo_databaseinfo from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_databaseinfo from nonvisualobject autoinstantiate
  7. end type
  8. forward prototypes
  9. 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)
  10. public function integer uof_set_dbinfo (transaction arg_transaction, integer arg_hisflag, ref string arg_msg)
  11. public function integer uof_set_superpsw (string arg_superpsw, ref string arg_msg)
  12. public function integer uof_set_hisdb (ref string arg_msg)
  13. end prototypes
  14. 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);//取数据库定义资料
  15. Int rslt = 1
  16. Long cnt
  17. String tmp_sconfig
  18. SELECT count(*) INTO :cnt FROM sys_DB_version USING arg_transaction;
  19. IF arg_transaction.SQLCode <> 0 THEN
  20. arg_msg = '查询数据库资料失败,请与供应商联系!'
  21. rslt = 0
  22. GOTO ext
  23. END IF
  24. IF cnt > 1 THEN
  25. arg_msg = '数据库资料被手动破坏,请与供应商联系!'
  26. rslt = 0
  27. GOTO ext
  28. END IF
  29. IF cnt = 0 THEN
  30. arg_msg = '数据还未有定义,请先定义数据库'
  31. rslt = -1
  32. GOTO ext
  33. END IF
  34. SELECT
  35. sys_DB_version.hisflag,
  36. sys_DB_version.superpsw,
  37. sys_DB_version.prg_id,
  38. sys_DB_version.cur_version
  39. INTO
  40. :arg_hisflag,
  41. :arg_superpsw,
  42. :arg_prg_id,
  43. :arg_cur_version
  44. FROM sys_DB_version
  45. USING arg_transaction;
  46. IF arg_transaction.SQLCode <> 0 THEN
  47. arg_msg = '查询当前数据库资料失败,请与供应商联系!'
  48. rslt = 0
  49. GOTO ext
  50. END IF
  51. //检查数据串是否合理
  52. IF sys_system_id + sys_power_key <> f_psw_bczh(tmp_sconfig,1,sys_power_key) THEN
  53. arg_msg = '数据库资料被恶意破坏或当前连接的数据库不是本系统的数据库,请与供应商联系!'
  54. rslt = 0
  55. GOTO ext
  56. END IF
  57. arg_superpsw = f_psw_bczh(arg_superpsw,1,sys_power_key)
  58. arg_prg_id = f_psw_bczh(arg_prg_id,1,sys_power_key)
  59. arg_cur_version = f_psw_bczh(arg_cur_version,1,sys_power_key)
  60. //messagebox('',arg_cur_version)
  61. IF arg_prg_id <> sys_prg_id THEN
  62. arg_msg = '数据库资料被恶意破坏或当前连接的数据库不是本系统的数据库,请与龙嘉软件联系!'
  63. rslt = 0
  64. GOTO ext
  65. END IF
  66. IF arg_cur_version < sys_Allow_version THEN
  67. arg_msg = '当前数据库资料版本太低不能应用新程序,请与龙嘉软件联系'
  68. rslt = 0
  69. GOTO ext
  70. END IF
  71. if arg_cur_version = '' then
  72. arg_msg = '当前数据库没有版本号,请与龙嘉软件联系'
  73. rslt = 0
  74. goto ext
  75. end if
  76. IF arg_cur_version >= sys_Allow_version THEN
  77. IF arg_cur_version < sys_cur_version THEN
  78. arg_msg = '升级数据库版本'
  79. rslt = -2
  80. GOTO ext
  81. END IF
  82. END IF
  83. ext:
  84. RETURN rslt
  85. end function
  86. public function integer uof_set_dbinfo (transaction arg_transaction, integer arg_hisflag, ref string arg_msg);//设定数据库资料
  87. Int rslt = 1
  88. Long cnt
  89. String tmp_sconfig,tmp_superpsw,tmp_ffpsw
  90. String ls_sys_prg_id,ls_sys_cur_version
  91. tmp_ffpsw = f_psw_bczh(sys_system_id ,0,sys_power_key)
  92. tmp_sconfig = f_psw_bczh(sys_system_id + sys_power_key ,0,sys_power_key)
  93. tmp_superpsw = f_psw_bczh('supersupersuper' ,0,sys_power_key)
  94. ls_sys_prg_id = f_psw_bczh(sys_prg_id,0,sys_power_key)
  95. ls_sys_cur_version = f_psw_bczh(sys_cur_version,0,sys_power_key)
  96. INSERT INTO sys_DB_version(
  97. Prg_id,
  98. Ori_version,
  99. cur_version,
  100. hisflag,
  101. superpsw)
  102. VALUES (:ls_sys_prg_id,
  103. :ls_sys_cur_version,
  104. :ls_sys_cur_version,
  105. :arg_hisflag,
  106. :tmp_superpsw)
  107. USING arg_transaction;
  108. IF arg_transaction.SQLCode <> 0 THEN
  109. arg_msg = '定义数据库资料失败'
  110. rslt = 0
  111. GOTO ext
  112. END IF
  113. ext:
  114. IF rslt = 0 THEN
  115. ROLLBACK;
  116. ELSE
  117. COMMIT;
  118. END IF
  119. RETURN rslt
  120. end function
  121. public function integer uof_set_superpsw (string arg_superpsw, ref string arg_msg);//设定超级密码
  122. int rslt = 1
  123. arg_superpsw = f_psw_bczh(arg_superpsw ,0,sys_power_key)
  124. String psw[],ls_psw
  125. Long ls_i,it_mxt
  126. DECLARE cur_scid CURSOR FOR
  127. SELECT u_user.psw
  128. FROM u_user ;
  129. OPEN cur_scid;
  130. FETCH cur_scid INTO :ls_psw;
  131. DO WHILE sqlca.SQLCode = 0
  132. it_mxt++
  133. psw[it_mxt] = ls_psw
  134. FETCH cur_scid INTO :ls_psw;
  135. LOOP
  136. close cur_scid;
  137. for ls_i = 1 to it_mxt
  138. if arg_superpsw = psw[ls_i] then
  139. arg_msg ='设定的超级密码与用户密码相同'
  140. rslt = 0
  141. goto ext
  142. end if
  143. next
  144. UPDATE sys_DB_version Set superpsw = :arg_superpsw;
  145. IF sqlca.SQLCode <> 0 THEN
  146. arg_msg = '设定超级密码失败'
  147. rslt = 0
  148. goto ext
  149. END IF
  150. ext:
  151. if rslt = 0 then
  152. rollback;
  153. elseif rslt = 1 then
  154. commit;
  155. end if
  156. return rslt
  157. end function
  158. public function integer uof_set_hisdb (ref string arg_msg);//设置历史数据库
  159. Int rslt = 1
  160. UPDATE sys_DB_version
  161. Set hisflag = 1;
  162. IF sqlca.SQLCode <> 0 THEN
  163. arg_msg = '设置历史数据库失败'
  164. rslt = 0
  165. GOTO ext
  166. END IF
  167. ext:
  168. IF rslt = 0 THEN
  169. ROLLBACK;
  170. ELSE
  171. COMMIT;
  172. END IF
  173. RETURN rslt
  174. end function
  175. on uo_databaseinfo.create
  176. call super::create
  177. TriggerEvent( this, "constructor" )
  178. end on
  179. on uo_databaseinfo.destroy
  180. TriggerEvent( this, "destructor" )
  181. call super::destroy
  182. end on