SQL server数据库 query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak') query.sql.add('restore database 数据库 from disk = 'c:\ccc.bak') Access数据库: 直接复制
SQL数据库备份: 备份: procedure TFrmDBMaintain.Button1Click(Sender: TObject); var address:String; begin if Edit1.Text='' then begin showmessage('文件名不能为空'); Exit; end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close; DMADO.ADOConnection1.DefaultDatabase:='Master'; DMADO.ADOConnection1.Open; address:=Edit1.Text; if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('SELECT * FROM sysdevices WHERE name='+''''+DBBK+''''); DMADO.ADOQuery1.Open; if DMADO.ADOQuery1.RecordCount=0 then if Application.MessageBox('是否添加新的数据库备份设备','备份设置',MB_YESNO)=6 then begin if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('USE master'); DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+','); DMADO.ADOQuery1.SQL.Add(''''+address+''''); DMADO.ADOQuery1.ExecSQL; end else Exit else if DMADO.ADOQuery1.Fields[6].AsString <> address then begin if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('USE master'); DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK); DMADO.ADOQuery1.ExecSQL; if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('USE master'); DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+','); DMADO.ADOQuery1.SQL.Add(''''+address+''''); DMADO.ADOQuery1.ExecSQL; end; if FileExists(Edit1.Text) then if Application.MessageBox('是否替换原数据库备份文件?','确认替换',MB_YESNO)=6 then begin try DeleteFile(address); except Application.MessageBox('替换数据库备份文件失败','替换文件',MB_OK); Exit; end; end else Exit; try if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('BACKUP DATABASE '+DatabaseName+' TO '+DBBK); DMADO.ADOQuery1.ExecSQL; DMADO.ADOQuery1.Close; except Application.MessageBox('数据库备份失败','错误',MB_OK) end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close; DMADO.ADOConnection1.DefaultDatabase:=DatabaseName; DMADO.ADOConnection1.Open;end; 恢复:procedure TFrmDBMaintain.Button2Click(Sender: TObject); var address: String; begin address:=Edit2.Text; if not FileExists(address) then begin Application.MessageBox('数据库备份文件不存在','文件',MB_OK); Exit; end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close; DMADO.ADOConnection1.DefaultDatabase:='Master'; DMADO.ADOConnection1.Open; try if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('USE master'); DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK); DMADO.ADOQuery1.ExecSQL; except Application.MessageBox('数据库备份驱动器不存在','错误',MB_OK); Exit; end; if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('USE master'); DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+','); DMADO.ADOQuery1.SQL.Add(''''+address+''''); DMADO.ADOQuery1.ExecSQL; try if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close; DMADO.ADOQuery1.SQL.Clear; DMADO.ADOQuery1.SQL.Add('RESTORE DATABASE '+DatabaseName+' FROM '+DBBK); DMADO.ADOQuery1.ExecSQL; DMADO.ADOQuery1.Close; except Application.MessageBox('数据库恢复失败','错误',MB_OK) end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close; DMADO.ADOConnection1.DefaultDatabase:=DatabaseName; DMADO.ADOConnection1.Open; end;
SQL server数据库 query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak')这个不行的..cannot return a result set
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('backup database medicine to disk=c:\ccc.mdf'); ADOQuery1.Open; 我这样试过,可是错误消息为"没提供完整信息"...谁知道为什么呀?
将ADOQuery1.Open改为ADOQuery1.ExecSQL试试。
如果你的SQL语句以命令行方式可以正确执行,试试下面的方法。 ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf'''); ADOQuery1.ExecSQL;
如果你的SQL语句以命令行方式可以正确执行,试试下面的方法。 ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf'''); ADOQuery1.ExecSQL; 这位兄台答中了...在delphi中,单引号是不是就像C++中的"\"转义字符呀??? 在目录前的两个单引号就是一个..我理解对了吗?
query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak')
query.sql.add('restore database 数据库 from disk = 'c:\ccc.bak')
Access数据库:
直接复制
备份:
procedure TFrmDBMaintain.Button1Click(Sender: TObject);
var
address:String;
begin
if Edit1.Text='' then
begin
showmessage('文件名不能为空');
Exit;
end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
DMADO.ADOConnection1.DefaultDatabase:='Master';
DMADO.ADOConnection1.Open; address:=Edit1.Text; if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('SELECT * FROM sysdevices WHERE name='+''''+DBBK+'''');
DMADO.ADOQuery1.Open;
if DMADO.ADOQuery1.RecordCount=0 then
if Application.MessageBox('是否添加新的数据库备份设备','备份设置',MB_YESNO)=6 then
begin
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('USE master');
DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
DMADO.ADOQuery1.SQL.Add(''''+address+'''');
DMADO.ADOQuery1.ExecSQL;
end
else Exit
else
if DMADO.ADOQuery1.Fields[6].AsString <> address then
begin
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('USE master');
DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK);
DMADO.ADOQuery1.ExecSQL;
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('USE master');
DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
DMADO.ADOQuery1.SQL.Add(''''+address+'''');
DMADO.ADOQuery1.ExecSQL;
end; if FileExists(Edit1.Text) then
if Application.MessageBox('是否替换原数据库备份文件?','确认替换',MB_YESNO)=6 then
begin
try
DeleteFile(address);
except
Application.MessageBox('替换数据库备份文件失败','替换文件',MB_OK);
Exit;
end;
end
else Exit; try
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('BACKUP DATABASE '+DatabaseName+' TO '+DBBK);
DMADO.ADOQuery1.ExecSQL;
DMADO.ADOQuery1.Close;
except
Application.MessageBox('数据库备份失败','错误',MB_OK)
end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
DMADO.ADOConnection1.DefaultDatabase:=DatabaseName;
DMADO.ADOConnection1.Open;end;
恢复:procedure TFrmDBMaintain.Button2Click(Sender: TObject);
var
address: String;
begin
address:=Edit2.Text;
if not FileExists(address) then
begin
Application.MessageBox('数据库备份文件不存在','文件',MB_OK);
Exit;
end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
DMADO.ADOConnection1.DefaultDatabase:='Master';
DMADO.ADOConnection1.Open; try
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('USE master');
DMADO.ADOQuery1.SQL.Add('EXEC sp_dropdevice '+DBBK);
DMADO.ADOQuery1.ExecSQL;
except
Application.MessageBox('数据库备份驱动器不存在','错误',MB_OK);
Exit;
end;
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('USE master');
DMADO.ADOQuery1.SQL.Add('EXEC sp_addumpdevice'+''''+'disk'+''''+','+''''+DBBK+''''+',');
DMADO.ADOQuery1.SQL.Add(''''+address+'''');
DMADO.ADOQuery1.ExecSQL;
try
if DMADO.ADOQuery1.Active then DMADO.ADOQuery1.Close;
DMADO.ADOQuery1.SQL.Clear;
DMADO.ADOQuery1.SQL.Add('RESTORE DATABASE '+DatabaseName+' FROM '+DBBK);
DMADO.ADOQuery1.ExecSQL;
DMADO.ADOQuery1.Close;
except
Application.MessageBox('数据库恢复失败','错误',MB_OK)
end; if DMADO.ADOConnection1.Connected then DMADO.ADOConnection1.Close;
DMADO.ADOConnection1.DefaultDatabase:=DatabaseName;
DMADO.ADOConnection1.Open;
end;
query.sql.add('backup database 数据库 to disk = 'c:\ccc.bak')这个不行的..cannot return a result set
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('backup database medicine to disk=c:\ccc.mdf');
ADOQuery1.Open;
我这样试过,可是错误消息为"没提供完整信息"...谁知道为什么呀?
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf''');
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('backup database medicine to disk=''c:\ccc.mdf''');
ADOQuery1.ExecSQL;
这位兄台答中了...在delphi中,单引号是不是就像C++中的"\"转义字符呀???
在目录前的两个单引号就是一个..我理解对了吗?
Delphi中的字符串用单引号括起来,对于字符串中的单引号以两个单引号表示。