hur.cn - 华软网

 热门搜索

高分求教在PB里怎么实现SQLSERVER数据库备份,急,在线等待。

  作者:未知    来源:网络    更新时间:2017/9/29
各位高手:
    怎么在PB里实现对SQLSERVER数据库的备份和恢复。急,在线等待。
------华软网友回答------
http://community.csdn.net/Expert/topic/3550/3550162.xml?temp=2.625674E-02
也可以自己搜索关键字:备份  可以搜出来N大把
------华软网友回复------
可以利用论坛的搜索功能,随便找了一个
//备份数据库,到c:\backup目录下面
string ls_backup
CreateDirectory(sle_1.text) 
ls_backup="BACKUP DATABASE DIRECTORY '"+sle_1.text+"' TRANSACTION LOG RENAME"
execute immediate : ls_backup;
if sqlca.sqlcode<>0 then
messagebox("备份数据错误","请确定文件夹是否存在!"+sqlca.sqlerrtext)
else
messagebox("数据备份成功","OK,数据备份成功,放在'C:\BACKUP\'目录下")
end if
------华软网友回复------
备份sql server和asa数据库的源程序

http://cpb.cn/download_file/73.zip
------华软网友回复------
呵呵,建议先查一下再提问阿,可以节约分数阿!!
------华软网友回复------
string         ls_bkfilename//备份路径和文件名
string         ls_sql//备份SQL语句

ls_bkfilename=trim(uo_text.sle_1.text)
if ls_bkfilename='' then 
open(w_msg)
w_msg.msgbox("备份路径和文件名不能为空!",information!,ok!,true)
uo_text.sle_1.setfocus()
return 
end if

//配置服务器参数
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "master"
SQLCA.ServerName = is_servername
SQLCA.LogId = is_logid
SQLCA.LogPass =is_logpass 
SQLCA.AutoCommit = true
SQLCA.DBParm = ""

IF uo_1.checked then
   ls_sql="BACKUP DATABASE "+is_database+" to disk='"+ ls_bkfilename +"'"
end if
IF uo_2.checked then
   ls_sql="BACKUP DATABASE "+is_database+" to disk='"+ ls_bkfilename +"' WITH DIFFERENTIAL"
end if
EXECUTE IMMEDIATE :ls_sql;

wf_move( true )
IF sqlca.SqlCode = -1 THEN
wf_move( false )
messagebox('数据库备份失败!',sqlca.SQLErrText,stopsign!)
ROLLBACK USING sqlca;
return 
end if
------华软网友回复------
网上N多源码
------华软网友回复------
//注意更改ini文件的文件名,我这里用da.ini


//数据备份
//输入数据库备份的文件名
STRING  Ls_FullPath , Ls_Name , Ls_DbName
INTEGER value
string d_date

d_date=string(Today())

value = GetFileSaveName("输入数据库备份的文件名" , Ls_FullPath , Ls_Name)

IF value = 1 THEN 
mle_1.Text = Ls_FullPath + "[" + d_date  + "]" +".BAK"
END IF


//开始备份
STRING DBMS,DBNAME,SERVERNAME,logid,logpass
DBMS=ProFileString('da.ini','DBMS','DBMS','')
DBNAME=ProFileString('da.ini','DBMS','DATABASE','')
SERVERNAME=profilestring('da.ini','DBMS','servername','')
logid=profilestring('da.ini','DBMS','logid','')
logpass=profilestring('da.ini','DBMS','LogPassword','')

string str_sql
//STRING DBNAME1
//DBNAME1 = "TAO"

string savefilename
savefilename=trim(mle_1.text)
if savefilename='' then 
  messagebox('提示','请输入备份路径及文件名!')
return
end if

//配置服务器参数
SQLCA.DBMS = DBMS
SQLCA.Database = "master"
SQLCA.ServerName = SERVERNAME
SQLCA.LogId = logid
SQLCA.LogPass = logpass
SQLCA.AutoCommit = true
SQLCA.DBParm = ""
st_msg.Visible = true
st_msg.text="正在备份数据库,这大约需要几分钟时间!"
SetPointer(HourGlass!)
This.Enabled = FALSE
cb_cancel.Enabled = FALSE

str_sql="BACKUP DATABASE "+DBNAME+" to disk='"+savefilename+"'"
EXECUTE IMMEDIATE :str_sql;
if sqlca.sqlcode <> 0 then
  st_msg.visible=false
messagebox('提示','备份数据库时出错,详细信息如下:~r~n~r~n'+sqlca.sqlerrtext)
SetPointer(Arrow!)
This.Enabled = TRUE
cb_cancel.Enabled = TRUE
return
else
st_msg.visible=false
messagebox('系统提示!','备份成功!')
close(parent)
// SetPointer(Arrow!)
// This.Enabled = TRUE
// cb_cancel.Enabled = TRUE
end if
------华软网友回复------
备份数据库
string  _BuildSQL,docname, named
int value

SQLCA.AutoCommit = true

docname=string(today(),'yyyymmdd')+'.bak'

value = GetFileSaveName("请输入备份文件名", &
docname, named, "bak", &
"备份文件 (*.bak),*.bak")
_BuildSQL = 'backup database '+sqlca.database+' to disk = "'+docname+'";'

EXECUTE IMMEDIATE :_BuildSQL;
if sqlca.sqlcode = 0 then

messagebox('提示信息','备份完毕!')
else
if SQLCA.Sqlcode=-1 then
f_message()

end if
end if
SQLCA.AutoCommit = false

恢复数据库
disconnect;
string file_string,_BuildSQL,docname,dbname
int file_num,value=0
dbname=sqlca.database
 Value = GetFileOpenName("选择要恢复的备份文件",  &
     docname,file_string, "bak",  &
 "数据库文件 (*.bak),*.bak") 
file_num=FileOpen(docname,  LineMode!, Read!, LockRead!)
  if  file_num<=0  then 
messagebox("错误信息!",'文件恢复失败,确定文件命名是否正确或数据库文件未被其它程序使用!')
else
FileClose(file_num)
      sqlca.database='master'
SQLCA.AutoCommit = true
   connect;
 _BuildSQL ='Restore Database '+dbname+' from Disk= "'+docname+'";'
EXECUTE IMMEDIATE :_BuildSQL;
if sqlca.sqlcode  = 0 then

messagebox('提示信息','恢复完毕!')

else
if SQLCA.Sqlcode=-1 then
f_message()

end if
end if

disconnect;
end if

restart()
需要说明的是,sqlserver数据库好像只能在服务器端备份,客户端备份不了。这个不知那位高手能解决了
------华软网友回复------
String ls_taskname,ls_saveto,ls_context
String ls_statement
string ls_msg,ls_savepath,ls_use
int li_net
string ls_dbms,ls_dbparm,ls_regpath
string dbms,database,servername,logid,logpass,autocommit,dbparm

if rb_backup.checked=true then             //备份
ls_saveto = sle_backpath.text
if isnull(ls_saveto) or ls_saveto = '' then
messagebox('提示信息!','请先选择数据库备份路径。')
return 0
end if

if isnull(ls_database) or ls_database = '' then
messagebox('提示信息!','请先选择数据库名称。')
return 0
end if

disconnect using sqlca;

sqlca.DBMS  = "MSS Microsoft SQL Server 2000"
sqlca.Database = 'master'
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""

connect using sqlca;

if sqlca.sqlcode <> 0 then
  messagebox('提示信息!','您输入的参数有误,无法连接到数据库。')
return -1
end if

IF FileExists ( ls_saveto ) THEN //检查指定的文件是否存在
 li_net=Messagebox('系统提示','系统发现文件"'+ls_saveto+'"已经存在.~r~n~n要替换它吗?',Question!,YesNo!)
 IF li_net= 1 THEN 
    FileDelete ( ls_saveto ) //删除指定的文件
 else
disconnect using sqlca;
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
return
  END IF
END IF
//设置鼠标指针
SetPointer(HourGlass!)//---开始备份---

This.Enabled = FALSE
ls_use = 'use master' 
EXECUTE IMMEDIATE :ls_use ;
SQLCA.AutoCommit = True

ls_saveto=sle_backpath.text
if right(ls_saveto,4)<>'.dat' then return 

ls_use = "EXEC sp_addumpdevice 'disk' , 'coolnan' , '" + ls_saveto + "'"  //数据库备份设备的创建
EXECUTE IMMEDIATE : ls_use ;
ls_use ='BACKUP DATABASE ' + ls_database + ' TO coolnan'  
EXECUTE IMMEDIATE : ls_use ;
IF SQLCA.SQLCODE = -1 THEN
Messagebox("系统信息","数据库备份失败!~r~n~n请检查路径正确与否。",Stopsign!)
this.enabled = TRUE
sqlca.sqlcode = 0
sqlca.sqldbcode = 0
ls_use = "EXEC sp_dropdevice 'coolnan'"
EXECUTE IMMEDIATE : ls_use ;
disconnect using sqlca;
SQLCA.AutoCommit = false
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
RETURN
END IF
ls_use = "EXEC sp_dropdevice 'coolnan'"
EXECUTE IMMEDIATE : ls_use ;
SetPointer(Arrow!)
IF SQLCA.SQLCODE >= 0 THEN
Messagebox("系统信息","备份完成!  ")
This.enabled = TRUE
SQLCA.AutoCommit = false
ls_use = "EXEC sp_dropdevice 'coolnan'"
EXECUTE IMMEDIATE : ls_use ;
disconnect using sqlca;
SQLCA.AutoCommit = false
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
RETURN
else
disconnect using sqlca;
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
//记录操作日志
//Ei_Log(2,login_ID,LoginInfo_ID,'数据备份',0,'数据备份')
//////////////
messagebox("消息","数据备份完成!")
END IF
------华软网友回复------
//数据恢复
elseif rb_restore.checked=true then
ls_saveto = sle_restore.text
if isnull(ls_saveto) or ls_saveto = '' then
messagebox('提示信息!','请先选择数据库备份文件。')
return 0
end if

if isnull(ls_database) or ls_database = '' then
messagebox('提示信息!','请先选择数据库名称。')
return 0
end if

disconnect using sqlca;
//设置鼠标指针
SetPointer(HourGlass!)//---开始备份---
This.Enabled = FALSE
sqlca.DBMS  = "MSS Microsoft SQL Server 2000"
sqlca.Database = 'master'
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;

if sqlca.sqlcode <> 0 then
  messagebox('提示信息!','您输入的参数有误,无法连接到数据库。')
SetPointer(Arrow!)
This.Enabled = TRUE
disconnect using sqlca;
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
return -1
end if

ls_statement = ' restore database '+ ls_database + " from disk = '" + ls_saveto + "' WITH REPLACE "  
EXECUTE IMMEDIATE :ls_statement  using sqlca;
IF sqlca.SqlCode = -1 THEN
messagebox('无法还原!',sqlca.SQLErrText)
ROLLBACK USING sqlca;
SetPointer(Arrow!)
This.Enabled = TRUE
disconnect using sqlca;
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
return  -1
end if

This.Enabled = TRUE
COMMIT USING sqlca;
disconnect using sqlca;
SQLCA.DBMS = "MSS Microsoft SQL Server"
sqlca.Database = ls_database
sqlca.ServerName  = ls_server
sqlca.LogId  = ls_username
sqlca.LogPass  = ls_passwd
sqlca.AutoCommit  = true
sqlca.DBParm  = ""
connect using sqlca;
//记录操作日志
//Ei_Log(2,login_ID,LoginInfo_ID,'数据恢复',0,'数据恢复')
//////////////
messagebox("消息","数据恢复成功!")
return 1
end if

------华软网友回复------
这里好热闹啊!我也参加一下,嘿嘿!
我这里有一个简单备份ASA数据库.db的例子,也贴上,这下再遇到备份数据问题的人可方便了。
在Global External Functions声明全局外部函数
//FindWindowA():根据窗口标题查找窗口
FUNCTION ulong FindWindowA(ulong WinHandle,String wintitle) LIBRARY "User32.dll"

第一步:选择备份文件的位置.
string ls_path 

integer li_result

li_result = GetFolder( "选择备份目录:", ls_path )

sle_1.text = ls_path  

第二步:开始备份文件
ulong ll_handle
int li_loop

if sle_1.text = '' then return 

SetPointer(HourGlass!) //设置鼠标指针
//运行备份数据库程序dbbackup,并使其最小化
//dbf = 指定数据库文件的位置
run("dbbackup -c ~"uid=dba;pwd=sql; dbf=C:\Program Files\Sybase\SQL Anywhere 7\asademo.db~" " + sle_1.text, Minimized!)

ll_handle = 0
//循环至dbbackup窗口打开
Do While ll_handle = 0
    ll_handle = FindWindowA("tty","dbbackup")
    Yield()
loop    
//等待dbbackup窗口关闭
Do While isWindow(ll_handle)
    Yield()
Loop
//应用执行完成
MessageBox("提示信息", "备份完成!")      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。