大家好,帮帮忙,实在是找不到答案了!
先看这段代码:
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
1.我在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/秒)。
2.数据库断开清空下,执行这段程序的时候出现了
“出错了+transaction not connected”
这是为什么呀?
3.如果不断开数据库则会出现如下情况:
“出错了+因为数据库正在使用,所以未能获得对数据库的排他访问权”
谁能帮忙解决下,怎样才能成功备份呀?
------解决方案--------------------
简单的讲,把上面的代码调整成这样试一下:
- C/C++ code
if(i_add=1) then disconnect using SQLCA; transaction ltr_master ltr_master = create transaction ltr_master = sqlca ltr_master.database = 'master' connect uisng ltr_master if ltr_master.sqlcode <> 0 then ..... end if restore= "restore database db_rigsystem from disk ='" + ls_Buffer+"\backup\db_rigsystem.bak'"; ltr_master.AutoCommit = true EXECUTE IMMEDIATE :restore using ltr_master; if ltr_master.sqlcode = 0 then messagebox('提示信息','数据库恢复成功!') else messagebox("提示信息","出错了+"+ltr_master.sqlerrtext) end if destroy ltr_master returnend if