大家好,帮帮忙,实在是找不到答案了!
先看这段代码:
string restore,ls_Buffer
integer i_add
ls_Buffer=GetCurrentDirectory()
i_add=messagebox("提示信息","是否真的要恢复备份数据库?",Question!,YesNo!,2)
if(i_add=1) then
disconnect using SQLCA;
restore= "restore database db_rigsystem from disk ='" + ls_Buffer+"\backup\db_rigsystem.bak'";
sqlca.AutoCommit = true
EXECUTE IMMEDIATE :restore;
if sqlca.sqlcode = 0 then
messagebox('提示信息','数据库恢复成功!')
else
messagebox("提示信息","出错了+"+sqlca.sqlerrtext)
end if
return
end if
在E:\PB-Workspace\cloth\backup中已经存在了备份文件db_rigsystem.bak
而且我在SQL查询分析器中输入:
restore database db_rigsystem from disk ='E:\PB-Workspace\cloth\backup\db_rigsystem.bak'也能执行成功
返回:
已处理 168 页,这些页属于数据库 'db_rigsystem' 的文件 'db_rigsystem_Data'(位于文件 1 上)。
已处理 1 页,这些页属于数据库 'db_rigsystem' 的文件 'db_rigsystem_Log'(位于文件 1 上)。
RESTORE DATABASE 操作成功地处理了 169 页,花费了 0.163 秒(8.449 MB/秒)。
但是在执行这段程序的时候却出现了“出错了+transaction not connected”
这是为什么呀?
------解决方案--------------------
我写的一个备份
string ls_path ,ls_use
INT li_net
Ls_path = sle_backpath.text
IF ls_path = "" THEN
Messagebox('系统提示',"请先指定要备份的数据文件的名称! ")
RETURN
END IF
IF FileExists ( ls_path ) THEN
li_net=Messagebox('信息','提示:系统发现在"'+ls_path+'"目录下已经存在一个同名的文件.~r~n~n要替换它吗?',Question!,YesNo!)
IF li_net= 1 THEN
FileDelete ( ls_path )
ELSE
END IF
END IF
SetPointer(HourGlass!)//---开始备份---
This.Enabled = FALSE
ls_use = "USE master"
EXECUTE IMMEDIATE :ls_use ;
messagebox("1",string(sqlca.sqlcode))
ls_use = "EXEC sp_addumpdevice 'disk' , 'zlssb' , '"+ls_path+"'"
messagebox(ls_path,ls_path)
EXECUTE IMMEDIATE :ls_use ;
messagebox("2",string(sqlca.sqlcode))
ls_use = "BACKUP DATABASE zlssb TO zlssb"
EXECUTE IMMEDIATE :ls_use ;
messagebox("3",string(sqlca.sqlcode))
IF SQLCA.SQLCODE = -1 THEN
Messagebox("系统信息","数据库备份失败!~r~n~n请到检查路径正确与否。",Stopsign!)
this.enabled = TRUE
sqlca.sqlcode = 0
sqlca.sqldbcode = 0
ls_use = "EXEC sp_dropdevice 'zlssb'"
EXECUTE IMMEDIATE : ls_use ;
RETURN
END IF
ls_use = "EXEC sp_dropdevice 'zlssb'"
EXECUTE IMMEDIATE : ls_use ;
SetPointer(Arrow!)
IF SQLCA.SQLCODE >= 0 THEN
Messagebox("系统信息","备份完成! ")
This.enabled = TRUE
RETURN
END IF
------解决方案--------------------
你为什么要断开呢
------解决方案--------------------
ls_use = "USE master"
EXECUTE IMMEDIATE :ls_use ;
这段要注意,必须连到 master上