uo_getdbinfo.sru 4.3 KB

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