MS产品中那些傻瓜型的操作总是让人爱不释手,很多复杂神奇的东西只需点一下按钮执行两步操作就轻而易举的实现了。SQL Server自然也是这些产品中的一员,初学者可以用他轻松的打开DBMS大堂的大门。但事情的两面性注定会使这种简单束缚我们的手脚甚至是我们的思想。当有勇敢者在大堂中呐喊我要做自己的备份工具,我要做自己的查询分析器(这时可能会有人提出这种“勇敢”的必要性,不过如果你的老板想要一个工具可以让数据库远离那些初级的管理员时,这种“勇敢”就不仅必要性而且有些无奈了),SQLDMO就是我们的终结者。
SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)其实是MS开发的一组COM组件。一听到COM组件,很多知道它的人都会会意的一笑,这意味着我们用很多语言毫无歧视的使用它里面的对象。我们可以用C,VB,Delphi,包括SQL Server本身来编写基于SQLDMO的程序。
下面我先用Delphi的例子来初步介绍DMO,以后再慢慢深化。
得到网络中的SQL服务器的列表:
//首先引用SQLDMO
Use SQLDMO_TLB;
//显示SQL服务器列表
procedure ShowSrvList;
var
AList: TStrings;
SQLSrvApp: Variant;
begin
try
//产生OLE对象
SQLSrvApp := CreateOleObject('SQLDMO.Application');
except
MessageDlg('系统初始出错!',mtInformation,[mbOK],0);
Exit;
end;
AList:=TStringList.Create;
try
if GetSrvList(SQLSrvApp,AList) then
begin
ComboBox1.Items.Assign(Alist);
end;
finally
SQLSrvApp:=Unassigned;
Alist.Free;
end;
end;
//得到SQL服务器列表
function GetSrvList(const ASQLSrvApp: Variant; var AList: TStrings): Boolean;
var
SrvList: Variant;
I: Integer;
begin
Result := False;
try
SrvList := ASQLSrvApp.ListAvailableSqlServers;
for I := 1 to SrvList.count do
begin
Alist.Add(SrvList.item(i));
end;
SrvList := Unassigned;
except
Exit;
end;
Result := True;
end;
如果以上代码理解了,下面是取得数据库列表的函数就很好理解了。
function GetDBList(const _Srv: _SQLServer;var AList: TStrings): Boolean;
var
DBlist:variant;
I:Integer;
begin
Result := False;
Try
//声明对象
DBlist := _Srv.databases;
for I := 1 to DBList.count do
AList.Add(DBList.Item(I,'dbo.').name);
DBList := Unassigned;
except
Exit;
end;
Result := True;
end;
取得表名列表,存储过程列表都是类似的方法,在此不再累赘。
以上方法在许多文章中都有介绍,在这里把他们再重复一下主要是为了保证系列文章的连贯性,而且还可以给初学者一些引点。以后的文章会深入一些,因为都是个人的经验和总结如果有所疏漏或错误还请大家指摘,以达到共同进步的目的。