$PBExportHeader$f_backup_db.srf global type f_backup_db from function_object end type forward prototypes global function integer f_backup_db (boolean arg_winrar, string arg_database, string arg_filename, ref string arg_msg) end prototypes global function integer f_backup_db (boolean arg_winrar, string arg_database, string arg_filename, ref string arg_msg);//备份数据库 //f_backup_db(arg_winrar,arg_database,arg_filename,arg_msg) Int rslt = 1 String comm IF FileExists(arg_filename) THEN rslt = 0 arg_msg = '备份文件已经存在,请重新填写备份文件名!' GOTO ext END IF comm = 'BACKUP DATABASE '+arg_database+' TO DISK= ~''+arg_filename+'~' with init ' Transaction ls_transsqlca ls_transsqlca = CREATE Transaction ls_transsqlca.DBMS = sqlca.DBMS ls_transsqlca.Database = 'master' ls_transsqlca.UserID = sqlca.UserID ls_transsqlca.DBPass = sqlca.DBPass ls_transsqlca.LogID = sqlca.LogID ls_transsqlca.LogPass = sqlca.LogPass ls_transsqlca.ServerName = sqlca.ServerName ls_transsqlca.DBParm = sqlca.DBParm IF ls_transsqlca.Database = '' OR ls_transsqlca.ServerName = '' THEN rslt = 0 arg_msg = "连接数据管理库失败!" GOTO ext END IF w_sys_wait.Show() CONNECT USING ls_transsqlca; ls_transsqlca.AutoCommit = TRUE EXECUTE IMMEDIATE :comm USING ls_transsqlca; w_sys_wait.Hide() IF ls_transsqlca.SQLCode <> 0 THEN arg_msg = '备份操作失败>'+ls_transsqlca.SQLErrText ROLLBACK USING ls_transsqlca; rslt = 0 GOTO ext END IF IF arg_winrar THEN String rar_comm //rar命令 String rar_path String rar_filename rar_filename = Reverse(Mid(Reverse ( arg_filename ),Pos( Reverse ( arg_filename ) ,'.') + 1,Pos( Reverse ( arg_filename ) ,'\') - Pos( Reverse ( arg_filename ) ,'.') - 1 )) + ".rar" rar_path = Left(arg_filename,Len(arg_filename) - Pos( Reverse ( arg_filename ) ,'\') + 1 ) rar_filename = rar_path + rar_filename rar_comm = sys_option_winrar_path + 'winrar a -p -df -o+ -ep "' + rar_filename +'" "'+ arg_filename + '"' IF Run(rar_comm) <> 1 THEN ROLLBACK USING ls_transsqlca; IF FileExists ( arg_filename ) THEN FileDelete ( arg_filename ) rslt = 0 arg_msg = '备份操作失败>压缩文件失败' GOTO ext END IF END IF COMMIT USING ls_transsqlca; arg_msg = '备份操作成功!' ext: DESTROY ls_transsqlca RETURN rslt end function