开发了一个计算软件。现在pb通过数据源连接了一个确定的数据库。遇到一个问题,算过一次以后,再算第二次,第一次的数据就没了。感觉如果修改数据库的话,各种改动工作量可能比较大。可不可以在pb里编程,在前台实现以下功能:
1.在sqlserver里附加数据库,和前台连接
2.将数据库文件制作副本,然后附加这个副本,和前台连接
3.将正在连接的数据库脱机,然后另存为数据文件。
------解决方案--------------------
数据库的备份与恢复
--sql 1备份pubs数据库到c:\pubs.bak
BACKUP DATABASE [pubs] TO DISK = N'c:\pubs.bak'
--sql 2 获取mast逻辑文件路径
SELECT FileName FROM master..sysfiles WHERE Name = 'master'
--sql3 获取备份文件的逻辑文件名及路径等
RESTORE FILELISTONLY FROM DISK = N'c:\pubs.bak'
--sql 4 还原到pubstmp数据库
RESTORE DATABASE [pubstmp] FROM DISK = N'c:\pubs.bak'
WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE ,
MOVE N'pubs' TO N'c:\program files\microsoft sql server\mssql\data\pubstmp.mdf',
MOVE N'pubs_log' TO N'c:\program files\microsoft sql server\mssql\data\pubstmp.ldf'
--其中'pubs','pubs_log'是'c:\pubs.bak'备份文件中的数据库逻辑文件名,
--这个逻辑名在sql 3中获取,你可以在pb中用游标来获取,不懂在帮助中查Dynamic SQL Format 3的用法
--'c:\program files\microsoft sql server\mssql\data\pubstmp.mdf'是还原数据库pubstmp逻辑文件存放路径
--这个路径可以设置到master逻辑文件路径的同一个文件夹内,当然也可以自己设置到别的文件夹
--sql 5 删除数据库
--DROP DATABASE [pubstmp]
------解决方案--------------------
备份和恢复SQL-SERVER2000数据库
如何在PB 中备份 SQL SERVER 2000 的数据库?
设置备份设备:
/****************************************************************/
string ls_execSql
ls_execSql = "sp_addumpdevice 'disk','HC_JXC','C:\BACKUP\HC_JXC.bak'"
execute immediate :ls_execSql using sqlca;
if sqlca.sqlcode <> 0 then
messagebox("设置设备","设备已经存在,不需要设置。")
else
messagebox("设置设备","设置设备成功!")
end if
/****************************************************************/
数据库备份
/****************************************************************/
string ls_execSql
ls_execSql = "backup database HC_JXC to HC_JXC"
execute immediate :ls_execSql using sqlca;
if sqlca.sqlcode <> 0 then
messagebox("备份数据","数据备份失败,可能数据库正在使用,或者数据库没有连接!")
else
messagebox("备份数据","数据备份成功!")
end if
/****************************************************************/
数据库恢复
/****************************************************************/
string ls_execSql
ls_execSql = "use master restore database HC_JXC from HC_JXC"
execute immediate :ls_execSql using sqlca;
if sqlca.sqlcode <> 0 then
messagebox("恢复数据","恢复数据失败,可能数据库正在使用,或者数据库没有连接!")
else
messagebox("恢复数据","恢复数据成功!")
end if