当前位置: 代码迷 >> PB >> transaction not connected急解决方法
  详细解决方案

transaction not connected急解决方法

热度:95   发布时间:2016-04-29 09:49:19.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
而且我在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上
  相关解决方案