hur.cn - 华软网

 热门搜索

PB中用SQL语句还原SQLServer2000数据库时出现问题?

  作者:未知    来源:网络    更新时间:2018/10/11
列位大虾:
    小弟有个问题:我在用PB程序还原数据库时,发现其中所用的SQL语句在查询分析器里能够执行,但到了PB却不能执行。
SQLSERVER查询分析器里的语句以下:
RESTORE DATABASE webdb FROM DISK='d:\workdata' WITH MOVE 'webdb_data' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\webdb_data.mdf',MOVE 'webdb_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL\Data\webdb_log.ldf'
提醒执行完成....

PB里的database isql session中执行上面的Sql语句,却汇报:
"Error C0195 由于数据库正在运用,所以未能取得对数据库的排它访问权";
PS:执行其余如SELECT的SQL语句能够成功;

究竟是什么回事?
------华软网友回答------
当有其它程序正在连接数据库时是不能还原的!
------华软网友回复------
把查询管理器断开,由于有其它程序正在连接数据库时是不能还原的!

------华软网友回复------
我已经把查询分析器关了,只留住PB执行语句一样存留那个毛病!!!我确信只有PB连接了数据库
请哪位写出还原程序的高手来指点一下,小弟急,万分谢谢!
------华软网友回复------
哪位大虾来看看,真的急
------华软网友回复------
把MSSQL关掉,把PB IDE里的数据库连接断开
再不行,生成exe,重启,不打开MSSQL和PB直接执行exe
注意:恢复MSSQL时保证另外地方没连接数据库
------华软网友回复------
还不行,预计是你代码的问题了 :)
------华软网友回复------
在运路程序时,要把pb中的数据库连接断掉,把MSSQL关掉,如果此数据库是多个人同时运用的话,还要保证其余人也同数据库断开连接!
------华软网友回复------
我断开pb连接的数据库,并生成一个exe,独立运行后sqlca.sqlcode前往照旧-1。请列位大虾帮我再找找原因,代码我觉得应该没有问题。由于在公司分析器都能够成功执行。
------华软网友回复------
我的做法是:重新建立一个事务对象,连接 master 数据库,然后执行恢复操作
transaction mytran
mytran = create transaction
mytran.DBMS = "ole db"
string ls_server =  profilestring("czdj.ini","database","servername","")
mytran.LogId = profilestring("czdj.ini","database","logid","")
mytran.LogPass = profilestring("czdj.ini","database","logpass","")
mytran.AutoCommit = False
mytran.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='" + ls_server + "',PROVIDERSTRING='database=master'"

 connect using mytran;
 if mytran.sqlcode <> 0 then
messagebox("警告","没法连接master数据库,&
请确定是否已装置Ms sqlserver数据库,和数据库服务器名、用户名和密码正确!")
return
end if

mytran.autocommit = true
。。。。
------华软网友回复------
请列位高手见教,小弟谢谢感动不尽!
------华软网友回复------
增补一下,我用的是pb10,用的是ole db连接,没有运用新的事务前也出现了楼上所说的问题

------华软网友回复------
或 在执行还原操作前 加上代码  disconnect ;
我曾用过此方法,但不太稳定,原因可能是运用该命令后要有一个时间间隔才能断开与数据库的连接
,如果没有完全断开连接,就没法执行还原操作

------华软网友回复------
编译成可执路程序,退出pb就能恢复了,我这里有pb9
下的恢复数据库代码。qq:185551190
------华软网友回复------
列位大虾:
    我在database isql session中执行还原语句已经成功并真正还原了数据库,不过运行PB程序虽然sqlcode前往值为零(成功),然则数据库却没有真正还原。请问这是什么回事?
------华软网友回复------
照旧没有解决,请问列位高手了
------华软网友回复------
列位大虾:
    我在database isql session中执行还原语句已经成功并真正还原了数据库,不过运行PB程序虽然sqlcode前往值为零(成功),然则数据库却没有真正还原。请问这是什么回事?
========================================================================

应该是 autoCommit = true
------华软网友回复------
没看见是这么久的帖子了 呵呵

我的是这样的, 编译事后没问题
===============================================================

string ls_iniFile = "dsn.ini", ls_sql
integer li_flag

if trim (sle_1.text) = '' or isNull (sle_1.text) then 
messagebox ("提醒", "请选择一个备份资料!")
sle_1.setfocus ()
return
end if
if not FileExists ( trim (sle_1.text) ) then 
messagebox ("提醒", "指定的资料不存留!")
sle_1.setfocus ()
return
end if
ls_sql = "USE Master restore database cgzx from disk = '" &
+ trim (sle_1.text) + "' with RESTART" 


Transaction SQLCA_Master
SQLCA_Master = CREATE transaction

SQLCA_Master.DBMS = "mss microsoft sql server"
SQLCA_Master.Database ="master"
SQLCA_Master.LogID = profileString (ls_iniFile, "database", "LogID", '')
SQLCA_Master.LogPass = profileString (ls_iniFile, "database", "LogPassword", '')
SQLCA_Master.ServerName= profileString (ls_iniFile, "database", "ServerName", '')
SQLCA_Master.DBparm = "Secure=1"
SQLCA_Master.AutoCommit= true

setpointer (hourGlass!)
disconnect using sqlca;
connect using sqlca_master;
if sqlca_master.SQLCode <> 0 then 
messageBox ("毛病", "连接数据库毛病!~r~n~r~n毛病代码:" + &
string (sqlca_master.sqlDbCode) + "~r~n详细信息:" + & 
sqlca_master.sqlERRText, stopSign!)
end if

EXECUTE IMMEDIATE :ls_sql USING SQLCA_Master; 
if SQLCA_Master.SQLCode <> 0 then 
messageBox ("数据库毛病", "还原数据库毛病!~r~n~r~n毛病代码:" + &
string (SQLCA_Master.sqlDbCode) + "~r~n详细信息:" + & 
SQLCA_Master.sqlERRText, stopSign!)
sle_1.setFocus ()
else
li_flag = 1
messageBox ("提醒", "还原数据库成功!")
end if

disconnect using  sqlca_master;
connect using sqlca;
destroy sqlca_master
if li_flag = 1 then close (parent)



------华软网友回复------
该说的都说了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。