sql客户端为什么不能备份数据?而在服务器端是可以备份数据的.下面语句是在能够连接sql server 2000的客户机上不能备份数据.
try
if Edit1.Text='' then
showmessage('请选择备份数库的路径')
else
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('backup database xhjdgl to disk='+''''+Trim(Edit1.Text)+'''');
EXECSQL;
end;
while true do
begin
ProgressBar1.Position := ProgressBar1.Position+1;
if ProgressBar1.Position=100 then
break;
end;
showmessage('备份成功');
end;
except
showmessage('数据库备份失败');
end;
try
if Edit1.Text='' then
showmessage('请选择备份数库的路径')
else
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('backup database xhjdgl to disk='+''''+Trim(Edit1.Text)+'''');
EXECSQL;
end;
while true do
begin
ProgressBar1.Position := ProgressBar1.Position+1;
if ProgressBar1.Position=100 then
break;
end;
showmessage('备份成功');
end;
except
showmessage('数据库备份失败');
end;
解决方案 »
- 关于"TChart"控件的使用问题,在线给分...
- 使用Idhttp.get('') 造成假死(堵塞),请问线程idhttp怎么才能做到不出错?
- 如何把光标移动到一个运行的程序或是打开的文件上?
- 一点点成就感,分享一下:从内存中加载并启动一个exe
- 唉, 又一个感人的爱情故事......
- 关于流的操作(狂散分)
- delphi中调用VC++做的dll中字符串显示问题
- 送大家一个支持多国语言的Form类。。。。送分。
- DELPHI select 返回结果所用的时间
- 特急!!!!delphi中几个form可以共用的公共变量在什么地方定义!!!
- 怎么样把广告图片嵌入到IE浏览器中啊?
- js中调用activex方法的问题
而在客户端运行时,也提示"备份成功",可在c:\中却没有abc.bak这个文件. try
ADOQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('backup database xhjdgl to disk='+'''c:\abc''');
ADOQuery1.EXECSQL;
showmessage('备份成功');
except
showmessage('数据库备份失败');
end;
从客户端备份数据时,为什么不在客户端电脑上的c:\形成abc.bak的文件,而是将这个文件保存到服务器端的c:\abc.bak上了,不知道怎么回事?
我也碰倒过 提供如下解决方法:
这是备份过程:
var
Path:string;
begin
try
path:=ExtractFilepath(application.EXEName);
if not DirectoryExists(path+'back\') then
CreateDir(path+'back\');
with DM.cmd do
begin
if tag=10 then CommandText:='BACKUP DATABASE official TO disk='''+path+'back\W'+FormatDateTime('yy-mm-dd',date)+'.bak'''
else
CommandText:='BACKUP DATABASE official TO disk=''D:\official_001.bak''';
Execute;
end;
if tag<>10 then
begin opt_obj.NetFileCopy(path+'\back\W'+FormatDateTime('yy-mm-dd',date),'\\webserver/D$\official_001.bak',PB);
DeleteFile('Y:\official_001.bak');
opt_obj.DeleteDriver('Y:');
end; MessageDlg('数据库备份成功!',mtInformation,[MBOK],0);
except
MessageDlg('数据库备份失败!',mterror,[MBOK],0);
end;
end;
上述中出现的一些方法过程还有函数如下解释:CreateDriver 是建立一个客户端关于服务器保存数据库备份文件路径的驱动映射 代码如下:
procedure CreateDriver(DriverID: string);
var
NetSource:TNetResource;
B:dword;
begin
try
with NetSource do
begin
dwType:=RESOURCETYPE_ANY;
lpLocalName:=Pansichar(DriverID);
lpRemoteName:=Pchar('\\webserver\d$');
lpProvider:='';
end; b:=WnetAddConnection2(netSource,Pchar(''),Pchar('administrator'),CONNECT_UPDATE_PROFILE);
if not (b=NO_ERROR) then showmessage(SysErrorMessage(GetLastError));
except
// Exit;
ShowMessage('无法联接网络路径');
end;
end;//NetFileCopy是关于从服务器上将备份文件拷贝下来 我这里使用了进度条
procedure NetFileCopy(SourceFile,MoveToFile:string;P:TRzProgressBar);
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
AssignFile(FromF, MoveToFile);
Reset(FromF, 1); { Record size = 1 } AssignFile(ToF,SourceFile); { Open output file }
Rewrite(ToF, 1); { Record size = 1 } P.PartsComplete:=0;
P.TotalParts:=sizeof(FromF);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
P.IncPartsByOne;
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
P.PartsComplete:=0;
end;DeleteDriver 这是删除建立的映射驱动器
procedure DeleteDriver(DriverID: string);
var
dwFlags: DWORD;
errCode: DWORD;
begin
dwFlags := CONNECT_UPDATE_PROFILE;
errCode := WNetCancelConnection2(PChar(DriverID), dwFlags, true);
if (errCode <> NO_ERROR) then
Application.MessageBox(PChar(SysErrorMessage(GetLastError)), '', MB_OK);
end;
我修改了一下备份过程
这是备份过程:
var
Path:string;
begin
try
path:=ExtractFilepath(application.EXEName);
if not DirectoryExists(path+'back\') then
CreateDir(path+'back\');
CreateDriver('Y:');
with DM.cmd do
begin
if tag=10 then CommandText:='BACKUP DATABASE official TO disk='''+path+'back\W'+FormatDateTime('yy-mm-dd',date)+'.bak'''
else
CommandText:='BACKUP DATABASE official TO disk=''D:\official_001.bak''';
Execute;
end;
if tag<>10 then
begin opt_obj.NetFileCopy(path+'\back\W'+FormatDateTime('yy-mm-dd',date),'Y:\official_001.bak',PB);
DeleteFile('Y:\official_001.bak');
opt_obj.DeleteDriver('Y:');
end; MessageDlg('数据库备份成功!',mtInformation,[MBOK],0);
except
MessageDlg('数据库备份失败!',mterror,[MBOK],0);
end;
end;