高手请进!帮我看看这段数据库备份的程序!!!

akai5831 2006-12-15 10:32:23
开发环境是PB8+SQLServer2000,
string ls_dbms,ls_database,ls_server,ls_username,ls_passwd,ls_dbparm;
int ls_fileExist=0

string sql,ls_use;
string path,file,pathfile;
int flag=0

// is_date=string(today())
file=trim(sle_name.text)+'.sql'
path=trim(sle_path.text)
pathfile=path+file

IF Trim(sle_name.Text)='' THEN
MessageBox('提示','请输入正确的文件名称')
RETURN 0
END IF

IF trim(sle_path.text)='' THEN
MessageBox('提示','请输入正确的路径')
RETURN 0
END IF

//从database.ini里读出数据库连接参数
ls_dbms =profilestring("database.INI","DATABASE","DBMS","")
ls_database =profilestring("database.INI","DATABASE","DataBase","") //当前连接的数据库
ls_username =profilestring("database.INI","DATABASE","LogID","")
ls_passwd =profilestring("database.INI","DATABASE","LogPass","")
ls_server =profilestring("database.INI","DATABASE","ServerName","")
//SQLCA.dbparm=profilestring("database.INI","DATABASE","DBParm","")

disconnect using sqlca; //断开当前的数据库hq1

connect using sqlca_master; //连接master数据库
if sqlca_master.sqlcode <> 0 then
messagebox('提示信息!','请检查database.INI文件,参数有误,系统无法连接到master数据库!')
return -1
end if

IF FileExists(pathfile) THEN //检查指定的文件是否存在
ls_fileExist=Messagebox('系统提示','系统发现文件"'+pathfile+'"已经存在.~r~n~n要替换它吗?',Question!,YesNo!)
IF ls_fileExist= 1 THEN //press yes button
FileDelete(pathfile) //删除指定的文件
else //如果press no button,则需要返回备份界面重新输入路径或文件名
disconnect using sqlca_master; //断开master数据库

connect using sqlca; //连接用户数据库hq1
return
END IF
END IF

//设置鼠标指针
SetPointer(HourGlass!)//---开始备份---
st_note.text ='正在备份数据库,请稍等...'
st_note.visible=true
This.Enabled =FALSE //当前对话框变成不能编辑模式
ls_use = 'EXEC' + '(' + "'" + ls_database + SQLCA.Database + "'" + ')' //crm为数据库名
EXECUTE IMMEDIATE :ls_use ;

// ls_use = 'EXEC' + '(' + " ' " + ls_database + sqlca_master.Database + "'" + ')' //SQLCA.Database此时为master
// EXECUTE IMMEDIATE :ls_use ;
SQLCA.AutoCommit = True //??????????????????????

sql="EXEC sp_addumpdevice 'disk','mydisk',' "+ pathfile+ " ' " //数据库备份设备的创建
EXECUTE IMMEDIATE : sql ;

if sqlca_master.sqlcode <> 0 then
messagebox("sp_addumpdevice",sqlca.sqlerrtext);
end if
sql='BACKUP DATABASE ' + ls_database + ' TO mydisk ' //开始 备份
EXECUTE IMMEDIATE : sql ;

IF sqlca_master.SQLCODE = -1 THEN
Messagebox("系统信息!","数据库备份失败!~r~n~n请检查路径正确与否!",Stopsign!)
this.enabled = TRUE
st_note.visible=false
sqlca.sqlcode = 0
sqlca.sqldbcode = 0

ls_use="EXEC sp_dropdevice @logicalname='mydisk' @delfile ='delfile' " //除去数据库设备或备份设备,从 master.dbo.sysdevices 删除该项
EXECUTE IMMEDIATE : ls_use ;
disconnect using sqlca_master; //断开master数据库

connect using sqlca; //连接hq1数据库
RETURN
END IF

ls_use = "EXEC sp_dropdevice @logicalname='mydisk' " //除去数据库设备或备份设备,从 master.dbo.sysdevices 删除该项
EXECUTE IMMEDIATE : ls_use ;

运行都没有什么错误,就是没有生成备份的文件!!!麻烦高手赐教!!!谢谢!!!
...全文
428 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
WOFEIYANG 2006-12-26
  • 打赏
  • 举报
回复
ls_dbms =profilestring("database.INI","DATABASE","DBMS","")

因为你进行一次备份后,文件的路径已经变掉了.你再去读路径改变之后的database.INI文件就找不到了.备份完成之后,将当前路径重新设回去,就可以了.因为你在调试环境下你的当前路径使终在你应用程序路径下的,因此在那环境下是不会有问题的.
WOFEIYANG 2006-12-26
  • 打赏
  • 举报
回复
ls_dbms =profilestring("database.INI","DATABASE","DBMS","")

因为你进行一次备份后,文件的路径已经变掉了.你再去改变之后的文件路径去读database.INI文件就找不到了.备份完成之后,将当前路径重新设回去.
akai5831 2006-12-22
  • 打赏
  • 举报
回复
我试过了,系统没有问题,其它的数据库发布都没有问题,可能是我代码里面用了getfileopenname()的原因(谢谢sdhylj(青锋) 的提醒!!!),等查明真正的原因后就结帐!
谢谢各位!!!
akai5831 2006-12-20
  • 打赏
  • 举报
回复
请问安装PB8 的时候要求输入License seat 和License type的时候填什么啊!
默认License seat是1 License type有两个:concurrent seat model 和networked seat model
akai5831 2006-12-20
  • 打赏
  • 举报
回复
我现在把程序最开始的代码改成下面的了:
// Profile hq1
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "hq1"
SQLCA.ServerName = "(local)"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""

connect using sqlca;

if sqlca.sqlcode<>0 then
messagebox("Database connect","数据库hq1连接出错!请检查hq1是否附加正确!",stopsign!)
halt close
end if

open(w_login)

怎么生产EXE文件后打开就连不上数据库,调试的时候还没有问题的
青锋-SS 2006-12-20
  • 打赏
  • 举报
回复
没碰到过,应该是系统的问题吧,找另外的机子试试.
akai5831 2006-12-20
  • 打赏
  • 举报
回复
我用过GetFolder()和GetFileOpenName(),但那是在界面里面啊,不打开那个界面就应该不会影响啊,现在连最开始的连接数据库都有问题
akai5831 2006-12-20
  • 打赏
  • 举报
回复
sql="backup database hq1 to disk='"+pathfile+"'"
execute immediate :sql using sqlca_master ;
青锋-SS 2006-12-20
  • 打赏
  • 举报
回复
ls_dbms =profilestring("database.INI","DATABASE","DBMS","")
再请问高手,上面这句语句为何在生成EXE文件后读不出来信息,一直为NULL,但调试的时候却没有问题!
-------------
如果你程序中调用了getfileopenname()之类的函数的话就会更改默认的操作目录,也就是说当前路径不在是你exe程序所在的文件夹,往往是由此引起的,可以用changedirectory()更改到程序所在路径.
akai5831 2006-12-20
  • 打赏
  • 举报
回复
我已经改过了,我现在数据库备份和恢复的代码就是这么做的,没用前面的代码!
青锋-SS 2006-12-20
  • 打赏
  • 举报
回复
告你个简单的(其实liubocy(天道酬勤)已经说了):

string ls_sql

sqlca.autocommit = true
ls_sql = "backup database kq to disk='c:\kq.bak'"
execute immediate :ls_sql;
-----------
注:kq是所备份的数据库名称,后面的文件路径及名称根据自己的要求更改就可以了.
akai5831 2006-12-20
  • 打赏
  • 举报
回复
调试的时候什么问题也没有,我只要一生成EXE文件就不行,连接不上数据库,都折腾了一个多星期了,PB8也装了两回了还是这样,真郁闷啊!
akai5831 2006-12-20
  • 打赏
  • 举报
回复
怎么会要求安装 IE5.5,我的机器上就有IE6啊!
青锋-SS 2006-12-20
  • 打赏
  • 举报
回复
怎么出来Java的东西了,JVM.
akai5831 2006-12-20
  • 打赏
  • 举报
回复
每次打开PB8都会弹出下面的对话框,麻烦看看是不是这个原因:
could not instantiate the webtarget applet info java class- error code %d

this is most likely caused by not having the microsoft java VM installed. you can install this VM through the "custom" install in IE5.5
akai5831 2006-12-20
  • 打赏
  • 举报
回复
是不是我的编译环境有问题啊,我装的是PB8
akai5831 2006-12-20
  • 打赏
  • 举报
回复
对啊,我最后改成确定的路径都不行
yangjianw2004 2006-12-20
  • 打赏
  • 举报
回复
你的database.INI 文件放大路径对吗?
akai5831 2006-12-20
  • 打赏
  • 举报
回复
调试的时候连接数据库没有问题,等生成EXE之后就连不上数据库了,不知道为何,高手帮我啊!!!
akai5831 2006-12-20
  • 打赏
  • 举报
回复
自己顶,高手帮忙啊!
为何生成EXE后就读不出来信息啊!
ls_dbms =profilestring("database.INI","DATABASE","DBMS","")
加载更多回复(6)

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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