读书人

再次寻求transaction not connected帮

发布时间: 2012-02-28 13:06:35 作者: rapoo

再次寻求transaction not connected帮助,急急急!
大家好,帮帮忙,实在是找不到答案了!
先看这段代码:
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 

读书人网 >PB

热点推荐