執行備份時,總是提示資料庫備份失敗,也就是執行backup database后,SQLCA.SQLCODE = -1。資料庫用的是PB自帶的ASA。問題出在什么地方?代碼如下:
ls_use = 'EXEC'+'('+"'USE '" + sqlca.database+')'
EXECUTE IMMEDIATE :ls_use ;
SQLCA.AutoCommit = TRUE
ls_use = "EXEC sp_addumpdevice 'disk' , '"+name+"' , '"+ls_path+"'" //name是目的資料庫的名字,ls_path是目的資料庫的路徑(包括資料庫名)
EXECUTE IMMEDIATE : ls_use ;
ls_use ="BACKUP DATABASE " + sqlca.database + " TO "+name+""
EXECUTE IMMEDIATE : ls_use ;
IF SQLCA.SQLCODE = -1 THEN
Messagebox("系統資訊","資料庫備份失敗!~r~n~n請到檢查路徑正確與否。",Stopsign!)
uj5u.com熱心網友回復:
呵呵,沙發~~你看一下sqlca.sqlerrtext就知道是什么錯誤了呀,等等,我寫段代碼給你
uj5u.com熱心網友回復:
執行exec 前加上"USE master"uj5u.com熱心網友回復:
抓出陳述句去,到資料庫里面試試吧uj5u.com熱心網友回復:
integer li_tempstring ls_tip
string ls_sql
string ls_ini
integer li_filenum
if isnull(as_database) or as_database = "" then
return -1
end if
if fileexists(as_backupzip) then
filedelete(as_backupzip)
end if
ls_ini = gs_path + "\data.ini"
if keydown(keycontrol!) = false then
if gf_deletelog(as_database) < 0 then
if gb_autoback = false then
messagebox("提示","洗掉日志失敗, 不能備份")
end if
close(w_busy)
return -1
end if
end if
if fileexists(ls_ini) then
filedelete(ls_ini)
end if
li_filenum = fileopen(ls_ini,linemode!,write!,lockwrite!,append!)
filewrite(li_filenum,"[data]")
filewrite(li_filenum,"version_id=" + as_ver)
filewrite(li_filenum,"data_name=" + as_dataname)
filewrite(li_filenum,"dbname=" + as_database)
filewrite(li_filenum,"data_memo=" + as_memo)
filewrite(li_filenum,"backup_time=" + string(today(),"yyyy-mm-dd") + " " + string(now(),"HH:MM:SS"))
fileclose(li_filenum)
ls_sql = "backup database " + as_database + " to disk = '" + as_backupzip + "' with init;"
execute immediate :ls_sql using gta_sys;
//li_temp = myzip_addfile(ls_file,as_backupzip)
//li_temp = myzip_addfile(ls_ini,as_backupzip)
//filedelete(ls_file)
if gta_sys.sqlcode<>0 then
if gb_autoback = false then
messagebox("提示","資料備份失敗")
end if
close(w_busy)
return -1
else
if gb_autoback = false then
messagebox("提示","資料備份成功,備份產生的檔案:~n" + as_backupzip)
end if
end if
filedelete(ls_ini)
changedirectory(gs_path)
return 1
uj5u.com熱心網友回復:
給你上面的函式可執行成功的
你自己研究一下吧
uj5u.com熱心網友回復:
呵呵,吃飯歸來,不用我寫了,樓上的就可以,你只要看看sqlca.sqlerrtext的資訊基本上就可以找到原因來自己解決的~~
uj5u.com熱心網友回復:
貼一篇我在《電腦報》上的文章。一個實用的Adaptive Server Anywhere資料庫備份/恢復程式
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;
if sqlca.sqlcode=0 then
messagebox("資訊提示",'備份成功!',information!,OK!)
else
messagebox("資訊提示",'備份失敗!',information!,OK!)
end if
uj5u.com熱心網友回復:
二、 恢復程式在表單上建一文本框 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;
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;
以上程式在 PB 9.0中除錯通過。
uj5u.com熱心網友回復:
2004年11月 電腦服上刊載uj5u.com熱心網友回復:
同意!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/92194.html
標籤:數據庫相關
