当前位置: 代码迷 >> PB >> 再次寻求transaction not connected帮助,该怎么解决
  详细解决方案

再次寻求transaction not connected帮助,该怎么解决

热度:27   发布时间:2016-04-29 09:48:58.0
再次寻求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
  相关解决方案