请问,如何在PB6.5中用程序实现Sybase数据库的备份和恢复?

hh23 2002-10-12 08:36:12
在程序里使用“dump database....”命令,备份不成功。
那位大虾有类似代码请发至long56@fm365.com ,请注明你的ID,保证结贴。
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice2water 2002-10-14
  • 打赏
  • 举报
回复
关于数据的备份与恢复...

我想在PB程序中实现数据库的完整备份(数据库后台是sqlServer)我使用了FileCopy()函数,但他不能对打开的数据库操作,请问,解决的办法是什莫?

setpointer(hourglass!)
date ld_date,ld_now
string ls_dd,ls_mm,ls_yyyy
select getdate() into :ld_date from sys_info ;
ld_now = date(ld_date)
ls_dd = string(day(ld_now))
ls_mm = string(month(ld_now))
ls_yyyy = string(year(ld_now))
if integer(ls_mm)<=9 then
ls_mm="0"+ls_mm
end if
if integer(ls_dd) <= 9 then
ls_dd = "0"+ls_dd
end if
string ls_filename,ls_path,ls_use
ls_filename = "tax"+ls_yyyy+ls_mm+ls_dd+".bak"

ls_path = "d:\"+ls_filename

ls_use = 'EXEC'+'('+"'USE databasename '"+')'
EXECUTE IMMEDIATE :ls_use ;



SQLCA.AutoCommit = TRUE

ls_use = "EXEC sp_addumpdevice 'disk'"+" , 'databasename' , "+" '"+ls_path+"'"
EXECUTE IMMEDIATE : ls_use ;

ls_use ='BACKUP DATABASE databasename to databasename'
EXECUTE IMMEDIATE : ls_use ;

ls_use = "exec sp_dropdevice 'database'"
EXECUTE IMMEDIATE : ls_use ;

SQLCA.AutoCommit = false

if sqlca.sqlcode = 0 then
ib_trans=false
ii_x=660
timer(0)
messagebox("提示","数据库备份成功!")
this.enabled =true
end if
close(this)




hh23 2002-10-14
  • 打赏
  • 举报
回复
to flyhot(阳光清晨)
不行啊,提示
Incorrect syntax near the keyword 'DATABASE'.
flyhot 2002-10-13
  • 打赏
  • 举报
回复
//////////////////////
//备份

string s_path ,s_use,s_inifile
int i_err=0
long l_pos

//备份的文件名-s_path
s_path = sle_1.text

SQLCA.AutoCommit = TRUE

s_use = "EXEC sp_addumpdevice 'disk' "+" , " + sqlca.database +","+" '"+s_path+"' "
EXECUTE IMMEDIATE : s_use ;
if sqlca.sqlcode<>0 then i_err=1

s_use ='BACKUP DATABASE ' + sqlca.database + ' to ' + sqlca.database
EXECUTE IMMEDIATE : s_use ;
if sqlca.sqlcode<>0 then i_err=1

s_use = "exec sp_dropdevice " + sqlca.database
EXECUTE IMMEDIATE : s_use ;
if sqlca.sqlcode<>0 then i_err=1
ufunc.uf_setbar(70)
SQLCA.AutoCommit = false

if i_err = 0 then
messagebox("提示","备份成功!")
close(parent)
return
else
messagebox("提示","备份失败!")
sle_1.setfocus()
end if
///////////////////////////////////////////////////////////////////////////////////////

//恢复
string s_path ,s_use
int i_err=0
Transaction SQLCA_MASTER


SQLCA_MASTER = CREATE Transaction
SQLCA_master.DBMS = sqlca.dbms
SQLCA_master.Database = "master"
SQLCA_master.LogPass = sqlca.logpass
SQLCA_master.ServerName = sqlca.servername
SQLCA_master.LogId = sqlca.logid
SQLCA_master.AutoCommit = false
SQLCA_master.DBParm = sqlca.dbparm

commit using sqlca;
disconnect using sqlca;

CONNECT using sqlca_master;
if sqlca_master.sqlcode<>0 then
messagebox("警告","数据库连接失败!")
connect using sqlca;
return
end if

//恢复备份文件
s_path = trim(sle_1.text)
sqlca_master.autocommit=true

s_use = "EXEC sp_addumpdevice 'disk' "+" , " + sqlca.database +","+" '"+s_path+"' "
EXECUTE IMMEDIATE : s_use using sqlca_master;
if sqlca_master.sqlcode<>0 then i_err=1

s_use = "RESTORE DATABASE " + sqlca.database + " FROM DISK = "+" '"+s_path+"' "
EXECUTE IMMEDIATE : s_use using sqlca_master;
if sqlca_master.sqlcode<>0 then i_err=1

s_use = "EXEC sp_dropdevice " + sqlca.database
EXECUTE IMMEDIATE : s_use using sqlca_master;
if sqlca_master.sqlcode<>0 then i_err=1

sqlca_master.autocommit=false
disconnect using sqlca_master;

connect using sqlca;

if i_err = 0 then
messagebox("提示","恢复成功")
close(parent)
return
else
messagebox("警告","恢复失败")
return
end if

!!!!
sybasebbs 2002-10-13
  • 打赏
  • 举报
回复
你先做一个批处理,用PB运行就可以了。不过好像必须在服务器上运行才行
sybasebbs 2002-10-13
  • 打赏
  • 举报
回复
就在在服务器上运行“dump database 数据库名 to 位置”应该只有这些了吧
hh23 2002-10-12
  • 打赏
  • 举报
回复
请问能具体一点吗?
sybasebbs 2002-10-12
  • 打赏
  • 举报
回复
据我所知,必须在服务器上才能实现!!!!!!!

752

社区成员

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

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