f_backup_db.srf 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. $PBExportHeader$f_backup_db.srf
  2. global type f_backup_db from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_backup_db (boolean arg_winrar, string arg_database, string arg_filename, ref string arg_msg)
  6. end prototypes
  7. global function integer f_backup_db (boolean arg_winrar, string arg_database, string arg_filename, ref string arg_msg);//备份数据库
  8. //f_backup_db(arg_winrar,arg_database,arg_filename,arg_msg)
  9. Int rslt = 1
  10. String comm
  11. IF FileExists(arg_filename) THEN
  12. rslt = 0
  13. arg_msg = '备份文件已经存在,请重新填写备份文件名!'
  14. GOTO ext
  15. END IF
  16. comm = 'BACKUP DATABASE '+arg_database+' TO DISK= ~''+arg_filename+'~' with init '
  17. Transaction ls_transsqlca
  18. ls_transsqlca = CREATE Transaction
  19. ls_transsqlca.DBMS = sqlca.DBMS
  20. ls_transsqlca.Database = 'master'
  21. ls_transsqlca.UserID = sqlca.UserID
  22. ls_transsqlca.DBPass = sqlca.DBPass
  23. ls_transsqlca.LogID = sqlca.LogID
  24. ls_transsqlca.LogPass = sqlca.LogPass
  25. ls_transsqlca.ServerName = sqlca.ServerName
  26. ls_transsqlca.DBParm = sqlca.DBParm
  27. IF ls_transsqlca.Database = '' OR ls_transsqlca.ServerName = '' THEN
  28. rslt = 0
  29. arg_msg = "连接数据管理库失败!"
  30. GOTO ext
  31. END IF
  32. w_sys_wait.Show()
  33. CONNECT USING ls_transsqlca;
  34. ls_transsqlca.AutoCommit = TRUE
  35. EXECUTE IMMEDIATE :comm USING ls_transsqlca;
  36. w_sys_wait.Hide()
  37. IF ls_transsqlca.SQLCode <> 0 THEN
  38. arg_msg = '备份操作失败>'+ls_transsqlca.SQLErrText
  39. ROLLBACK USING ls_transsqlca;
  40. rslt = 0
  41. GOTO ext
  42. END IF
  43. IF arg_winrar THEN
  44. String rar_comm //rar命令
  45. String rar_path
  46. String rar_filename
  47. rar_filename = Reverse(Mid(Reverse ( arg_filename ),Pos( Reverse ( arg_filename ) ,'.') + 1,Pos( Reverse ( arg_filename ) ,'\') - Pos( Reverse ( arg_filename ) ,'.') - 1 )) + ".rar"
  48. rar_path = Left(arg_filename,Len(arg_filename) - Pos( Reverse ( arg_filename ) ,'\') + 1 )
  49. rar_filename = rar_path + rar_filename
  50. rar_comm = sys_option_winrar_path + 'winrar a -p -df -o+ -ep "' + rar_filename +'" "'+ arg_filename + '"'
  51. IF Run(rar_comm) <> 1 THEN
  52. ROLLBACK USING ls_transsqlca;
  53. IF FileExists ( arg_filename ) THEN FileDelete ( arg_filename )
  54. rslt = 0
  55. arg_msg = '备份操作失败>压缩文件失败'
  56. GOTO ext
  57. END IF
  58. END IF
  59. COMMIT USING ls_transsqlca;
  60. arg_msg = '备份操作成功!'
  61. ext:
  62. DESTROY ls_transsqlca
  63. RETURN rslt
  64. end function