怎样调用MSSQL的备份功能(非本机)或能调出其备份设备位置窗口???(200分)

Z

ZZHI

Unregistered / Unconfirmed
GUEST, unregistred user!
在MSSQL个人版中,对其他机器上的MSSQL数据库做备份时,在“选择备份目的”,
“文件名”中按...的按纽,可看到数据库所在机器(非本机)的目录。
请问用delphi怎样可调用MSSQL的这个异地备份功能????
分不够可再加,望会的大侠能指点一二!!!
 
使用导出数据
导出到其他服务器的数据库中
再备份
 
操作的就是其他机器上的数据库,备份也是在其机器上,而操作却不是在那台机器上!
也就是在本机上备份数据库在本机上,只是操作的是在其化机器的MSSQL上操作。
不知道我说明白了没有!
 
通过一条SQL语句可能实现,但不能让用户能选择那台机器上的目录。
而MSSQL的本身备份的功能则可能出现那台机器上的目录供人选择。
那台机器上只有MSSQL。
 
可以通过编程做
 
怎么做吗???????

不能在数据库机器上又加个什么程序的!
 
呵呵呵,当然不另加什么程序,用sql server就行了![8D]
 
[:(]
to dirk:
这当然知道了!用Delphi怎么调用这个功能?


 
呵呵呵,逗逗你,可以实现,我花了一天时间对MS SQLServer做了点研究,略有小成,
代码还需整理一下,现在上网不方便,可能到下周一可以贴上来,稍安勿燥。
 
用事件探查器跟踪一下就知道了
xp_availablemedia 2 //返回服务器上的硬盘盘符等信息
EXECUTE master.dbo.xp_dirtree N'C:/', 1, 1 //返回C盘第一级子目录及文件名,第二个参数是目录的级数,第三个参数:1包括文件,0不包括
有了这些信息你还不能自己生成这颗树吗.
 
SQL自带了一个DLL中有提供,包括它自带的企业管理里面的也是调用那个DLL。
具体名称我忘了,看看后面的高手有没人知道
 
关注,俺也在郁闷这个问题
 
zm30说的没错,那代码就不贴了。[:)]

就说几个存储过程的用法好了:
master..xp_fixeddrives //返回硬盘驱动器的信息
master..xp_dirtree //列目录,参数如zm30所说
就这些。
 
郁闷,被zm30抢了……
 
不用郁闷了,来论坛的目的就是共同进步,分数都无关紧要,我可以不要分。
 
[:D][:D][:D]
不是分的问题,只是自己刚要说的话被人抢先一步说出来了,憋的荒……

呵呵呵……郁闷一下好多了,呵呵呵,分数还是给你吧,先答先得。

代码还是贴出来,去掉了一些不相关的代码,没有整理,可能会出错,大致如此,应该能理解。

procedure TFrm_GetDirFle.FormCreate(Sender: TObject);
var
FTN,FTN1:TTreeNode;
s:^string;
ModelAdded:boolean;
begin
ModelAdded:=false;
ADOQ1.Close ;
ADOQ1.SQL.Clear ;
ADOQ1.SQL.Add('master..xp_fixeddrives');
ADOQ1.Open ;
while not ADOQ1.Eof do
begin
new(s);
s^:=trim(ADOQ1.Fields[0].AsString )+':/';
FTN:=TV.Items.AddObject(nil,s^+' ('+trim(ADOQ1.Fields[1].AsString )+' MB 空闲)',s);
FTN.ImageIndex :=DirUnSelected;
FTN.SelectedIndex :=DirSelected;
ADOQ2.Close ;
ADOQ2.SQL.Clear ;
ADOQ2.SQL.Add('master..xp_dirtree '''+string(FTn.Data^)+''',1,1');
ADOQ2.SQL.Add('if @@ROWCOUNT=0 ');
ADOQ2.SQL.Add('select '':/?''');
ADOQ2.Open ;
if ADOQ2.Fields[0].AsString <>':/?' then
ADOQ2.Sort :='file ASC';
while (not ADOQ2.Eof) and (ADOQ1.Fields[0].AsString <>':/?') do
begin
new(s);
if ADOQ2.FieldByName('file').AsInteger =0 then
begin
if (trim(ADOQ2.FieldByName('subdirectory').AsString )<>'.') and (trim(ADOQ2.FieldByName('subdirectory').AsString )<>'..') then
begin
s^:=string(FTN.Data^)+ trim(ADOQ2.FieldByName('subdirectory').AsString )+'/';
FTN1:=TV.Items.AddChildObject(FTN,trim(ADOQ2.FieldByName('subdirectory').AsString ),s);
FTN1.ImageIndex :=DirUnGeted;
FTN1.SelectedIndex :=DirSelected;
end;
end
else begin
if FShowFile=0 then
begin
s^:=string(FTN.Data^)+ trim(ADOQ2.FieldByName('subdirectory').AsString );
FTN1:=TV.Items.AddChildObject(FTN,trim(ADOQ2.FieldByName('subdirectory').AsString ),s);
FTN1.ImageIndex :=FileImg;
FTN1.SelectedIndex :=FileImg;
end;
end;
ADOQ2.Next ;
end;
ADOQ1.Next ;
end;
end;


procedure TFrm_GetDirFle.TVChange(Sender: TObject; Node: TTreeNode);
var
FTN:TTreeNode;
s:^string;
ModelAdded:boolean;
begin
if Node=nil then exit;
ModelAdded:=false;
if Node.ImageIndex =DirUnGeted then
begin
ADOQ1.Close ;
ADOQ1.SQL.Clear ;
ADOQ1.SQL.Add('master..xp_dirtree '''+string(Node.Data^)+''',1,1');
ADOQ1.SQL.Add('if @@ROWCOUNT=0 ');
ADOQ1.SQL.Add('select '':/?''');
try
ADOQ1.Open ;
if ADOQ1.Fields[0].AsString <>':/?' then
ADOQ1.Sort :='file ASC';
while (not ADOQ1.Eof) and (ADOQ1.Fields[0].AsString <>':/?') do
begin
new(s);
if ADOQ1.FieldByName('file').AsInteger =0 then
begin
if (trim(ADOQ1.FieldByName('subdirectory').AsString )<>'.') and (trim(ADOQ1.FieldByName('subdirectory').AsString )<>'..') then
begin
s^:=string(Node.Data^)+ trim(ADOQ1.FieldByName('subdirectory').AsString )+'/';
FTN:=TV.Items.AddChildObject(Node,trim(ADOQ1.FieldByName('subdirectory').AsString ),s);
FTN.ImageIndex :=DirUnGeted;
FTN.SelectedIndex :=DirSelected;
end;
end
else begin
if FShowFile=0 then
begin
s^:=string(Node.Data^)+ trim(ADOQ1.FieldByName('subdirectory').AsString );
FTN:=TV.Items.AddChildObject(Node,trim(ADOQ1.FieldByName('subdirectory').AsString ),s);
FTN.ImageIndex :=FileImg;
FTN.SelectedIndex :=FileImg;
end;
end;
ADOQ1.Next ;
end;
Node.ImageIndex :=DirUnSelected;
Node.Expand(false);
except
dispose(Node.Data);
Node.Delete ;
end;
end;
end;
 
有谁知道是那个Dll吗??????
 
xpstar.dll
有必要吗??
 
顶部