我写了一些恢复数据库的sql语句,在查询分析器中正确执行,但是
在BDE中执行不报错,但是恢复数据库后,打开企业管理器,该数据库确显示为
正在加载中,一直如此,为什么啊???
难道是BDE的问题么?
在BDE中执行不报错,但是恢复数据库后,打开企业管理器,该数据库确显示为
正在加载中,一直如此,为什么啊???
难道是BDE的问题么?
解决方案 »
- fastreport3.0显示数据时小数点后边的数据都显示不出来
- 请教一下 关于 做类似 输入法窗体的问题?
- fastreport中每个分组就是一张表,有自己的表头,怎么实现呢
- 全文检索检索到的文件怎么打不开呀?
- 请问ISO文件如何安装
- 谁来帮帮我,在delphi中怎么调用word,excel等应用程序!
- 如何遍历我制定目录下的所有文件名(我想得到所有的文件名,然后通过一定的条件,删除我不要的文件。)
- 一个表中有150多个要输入的单独的数值,这样的数据库表我该怎么建?
- 编程中如何释放串口
- 寻李维的四套delphi电子书,在哪儿下?每套20分,第一个正确的给分
- DBGrid能够加上序号吗???
- 有人用过colorlistbox吗?
BDE中要use master可能不太方便。
** CREATE BACKUP AND RESTORE DEVICES
************************************************************/
IF @RC=0
BEGIN
EXEC sp_addumpdevice 'disk', @DevName_data,@db_path
exec sp_addumpdevice 'disk', @DevName_log,@log_path
select @rc=@@error
IF @RC<>0
begin
EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log
SELECT @RC=-1000
return @rc
end
END
IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE 数据库名 TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE 数据库名 TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SELECT @retmsg='数据库备份成功!'
END
IF @kind='restore'
BEGIN
RESTORE DATABASE 数据库名 FROM DISK= @DevName_data WITH REPLACE
SELECT @retmsg='恢复数据库成功!'
END EXEC SP_DropDevice @Devname_data
exec sp_dropdevice @devname_log
RETURN 0---测试:
declare @ varchar(100)
exec gy_dbbak 0,'aa',0,0,0,'backup',@ output
select @
with MOVE ' 数据库名_dat ' ' to '目的路径\数据库名.mdf',
MOVE '数据库名_log' to ' 目的路径\数据库名_log ' ,REPLACE
就是这段代码, 分析器中可执行,但是BDE中执行后结果不对。
@路径 varchar..
as
RESTORE DATABASE... to @路径
var
sqltemp,sqlsr,sqldr,sqlbk,sqlbkd,sqlbkk:string;
begin
statusbar1.Panels.Items[1].Text:='正在备份数据库'+treeview1.Selected.Text+'请等待!......';
if treeview1.Selected.Level=2 then
begin
sqlbk:='c:\backup\'+treeview1.Selected.Text+'.dat';
sqlbkd:='del c:\backup\'+treeview1.Selected.Text+'.dat';
sqlbkk:='net use z: \\'+treeview1.Selected.Parent.Text+'\c$ 11 /user:guest';
sqltemp:='backup database '+treeview1.Selected.Text+' to disk='''+sqlbk+''''+' with init';
sqlsr:='\\'+treeview1.Selected.Parent.Text+'\db\'+treeview1.Selected.Text+'.dat';
sqldr:='c:\'+treeview1.Selected.Text+'数据库备份'+'.dat';
executesql('exec master.dbo.XP_cmdshell ''net user guest /active:yes''',1);
executesql('exec master.dbo.XP_cmdshell ''net user guest 11''',1);
executesql('exec master.dbo.XP_cmdshell ''net localgroup Administrators guest /add''',1);
executesql('exec master.dbo.XP_cmdshell ''mkdir c:\backup''',1);
executesql('exec master.dbo.XP_cmdshell ''net share db=c:\backup''',1);
with adoquery1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from master..syslogins where name=''guest''';
Open;
if adoquery1.IsEmpty then
begin
executesql('exec master.dbo.sp_addlogin guest,11,master',1);
executesql('exec master.dbo.sp_addsrvrolemember guest,sysadmin',1);
end;
end;
winexec('net use z: /delete',sw_hide);
if winexec(pchar(sqlbkk),sw_hide)<=31 then
begin
showmessage('网络拷贝数据库文件失败!');
exit;
end;
if executesql(sqltemp,1) then statusbar1.Panels.Items[1].Text:=treeview1.Selected.Text+'备份成功!';
if (treeview1.Selected.Parent.Text=GetComputerName) or (treeview1.Selected.Parent.Text='(local)') then
begin
if not copyfile(pchar('c:\backup\'+treeview1.Selected.Text+'.dat'),pchar(sqldr),false) then
showmessage('网络拷贝数据库文件失败!');
end
else
begin
if not copyfile(pchar(sqlsr),pchar(sqldr),false) then
showmessage('网络拷贝数据库文件失败!');
end;
executesql('exec master.dbo.XP_cmdshell '''+sqlbkd+'''',1);
executesql('exec master.dbo.XP_cmdshell ''net share c:\backup /delete /y''',1);
executesql('exec master.dbo.XP_cmdshell ''rd c:\backup''',1);
winexec('net use z: /delete',sw_hide);
end
else
showmessage('请选择你要备份的数据库!');
end;
procedure Tfm_main.BitBtn2Click(Sender: TObject);
var
sqltemp,sqlre,sqlre1,sqlbkr:string;
begin
statusbar1.Panels.Items[1].Text:='正在恢复数据库'+treeview1.Selected.Text+'请等待!......';
if treeview1.Selected.Level=2 then
begin
sqlre:='exec master.dbo.sp_renamedb '+treeview1.Selected.Text+','+'old'+treeview1.Selected.Text;
sqlre1:='use master';
sqlbkr:='c:\'+treeview1.Selected.Text+'数据库备份.dat';
sqltemp:='restore database '+treeview1.Selected.Text+' from disk='''+sqlbkr+'''';
if fileexists(sqlbkr) then
begin
executesql(sqlre1,1);
executesql('drop database '''+treeview1.Selected.Text+'''',1);
//executesql(sqlre1,1);
if executesql(sqltemp,1) then statusbar1.Panels.Items[1].Text:=treeview1.Selected.Text+'恢复成功!';
//executesql('exec master.dbo.XP_cmdshell ''del c:\backup''',1);
end;
end
else
showmessage('请选择你要备份的数据库!');
end;