恢复ASA7的数据库。老出错?急??

myf7961 2006-06-13 06:17:15
我是PB8+ASA7.0,现在在程序界面要做一个备份,恢复的东西。备份是可以的,但恢复的时候老出错,我先DISCONNECT,然后
if not fileexists(sle_1.text) then
messagebox('提示','数据库文件不存在!')
return 1
end if
choose case filecopy(sle_1.text,'c:\rsgl\rs.db',true)
case 1
messagebox('提示','数据恢复成功!')
case -1
messagebox('警告','数据恢复失败,不能不能写入目标文件,可能是目标文件正在使用!',stopsign!)
case -2
messagebox('警告','数据恢复失败,不能读取源文件!',stopsign!)
end choose
cb_1.enabled=false
cb_2.enabled=false
cb_3.enabled=true
但老说文件在用,但我如果是从操作系统拷贝操作,他没说在占用,成功替换!怎么回事啊??急
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shineclub 2006-08-28
  • 打赏
  • 举报
回复
恢复后延时1秒或者更长时间
sleep(1)
zhz0521 2006-08-23
  • 打赏
  • 举报
回复
单搞定ASA备份/恢复程序
Adaptive Server Anywhere(本文中简称ASA) 是PowerBuilder(本文中简称PB)自带的数据库管理系统,可作为小型应用系统的数据库服务器。而数据库的备份/恢复是一项基本的工作,要想用短短几分钟就完成这类程序的编写,能做到吗?本文就将为大家介绍一个用PB编写的ASA备份/恢复程序,只需很短的时间,就可以编制完成并运用在以ASA作为数据环境的小型应用上。
一 备份程序
先来看看备份程序部分的写法。在窗体上建一文本框 sle_1,用来显示备份的文件名,并添加两个按钮:cb_1(浏览)、cb_2(备份)。相应的事件代码如下:
//cb_1.clicked()
string fname,name
GetfileSaveName('保存',fname,name,“db”,'数据库备份文件(*.1),*.1')
sle_1.text=fname
//cb_2.clicked()
string mysql,bfname
bfname=trim(sle_1.text)
bfname=left(bfname,len(bfname)-2)
mysql=“BACKUP DATABASE TO '”+bfname+“'”
execute immediate :Mysql USING SQLCA;//运用SQL语句立刻执行备份
if sqlca.sqlcode=0 then
messagebox(“信息提示”,'备份成功!',information!,OK!)//给出备份成功与否的相关信息
else
messagebox(“信息提示”,'备份失败!',information!,OK!)
end if
二 恢复程序
再来看看恢复数据库程序的编写。在窗体上建一文本框 sle_1,显示用来恢复的备份文件名,并添加两个按钮:cb_1(查找)、cb_2(恢复)。声明一个修改文件属性的API函数:
FUNCTION ulong SetFileAttributes(ref string lpFileName,ulong dwFileAttributes) LIBRARY “kernel32.dll” ALIAS FOR “SetFileAttributesA”
相应的事件代码如下:
//cb_1.clicked()
string fname,name
GetfileOPenName('查找',fname,name,“1”,“数据库备份文件(*.1),*.1”)
sle_1.text=fname
//cb_2.clicked()
string mysql,bfname,gzname
ulong sxz=32,kb //sxz为文件的属性值,32表示可读写
boolean tmp
bfname=trim(sle_1.text)
bfname=left(bfname,len(bfname)-2)
// d:\slgz 为示例中数据库文件所在目录,tmp.db为临时的数据库文件
mysql=“RESTORE DATABASE 'd:\slgz\tmp.db' FROM '”+bfname+“'”
execute immediate :Mysql USING SQLCA;//同样是运用SQL语句来立刻执行恢复数据库的工作
if sqlca.sqlcode<>0 then
messagebox(“信息提示”,'数据恢复失败!',information!,OK!)
return
end if
disconnect; //断开数据库连接
gzname='d:\slgz\gz.db' //包含路径的数据库文件
SetFileAttributes(gzname,sxz) // 去掉只读属性
tmp=filedelete('d:\slgz\gz.db') //删除恢复前的数据库
if tmp=false then
messagebox(“信息提示”,'备份失败!',information!,OK!)
return
end if
//将临时的数据库复制到当前的数据库文件上
bfname=“d:\slgz\tmp.db”
gzname=“d:\slgz\gz.db”
kb=filecopy(bfname,gzname,true )
if kb=1 then
messagebox(“信息提示”,'数据库恢复成功!',information!,OK!)
else
messagebox(“信息提示”,'数据库复制失败!',information!,OK!)
return
end if
filedelete('d:\slgz\tmp.db') //删除临时的数据库文件
connect;
三 小结
程序备份和恢复的实现都只是调用了SQL内置的功能来实现,使程序显得相对简洁。功能虽然比较单一和简单,却也能满足数据库的备份和恢复的工作需求,在要求不高的应用场合可为数据库管理人员节约大量精力。上述程序在 PB 9.0中调试通过。

zhz0521 2006-08-22
  • 打赏
  • 举报
回复
disconnect后也不行,是不是dbeng7.exe还在工作的原因?
zhz0521 2006-08-22
  • 打赏
  • 举报
回复
顶一下,我也碰到这个问题,有没有解决方法啊?
xyqiqi 2006-06-19
  • 打赏
  • 举报
回复
数据一恢复失败,就报文件在用,这是你自己写的提示信息呀。如果是-1,是源文件读取失败。
myf7961 2006-06-13
  • 打赏
  • 举报
回复
顶一下啊

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧