有一个本的方法:就是查找已安装的SQl server 个数,如果为零既没有安装 delphi在Comobj单元中提供了一个SQLDMO,查出的网络机器名和本机的名字比 较就可以得到指定的计算机是否装了SQl server;下面给出了获得所有已装 SQl server的代码:只要获得本地的名字,进行比较就行了 procedure TForm1.Button1Click(Sender: TObject); var SQLServer:Variant; ServerList:Variant; i,nServers:integer; sRetValue:String; begin SQLServer := CreateOleObject('SQLDMO.Application'); ServerList:= SQLServer.ListAvailableSQLServers; nServers:=ServerList.Count; for i := 1 to nservers do ListBox1.Items.Add(ServerList.Item(i)); SQLServer:=NULL; serverList:=NULL; end;
有个函数可以列出网内所有的SQL服务器 function GetSQLServerList(var List: Tstringlist): boolean; var i: integer; sRetValue: string; SQLServer: Variant; ServerList: Variant; begin Result := False; List.Clear; try SQLServer := CreateOleObject('SQLDMO.Application'); ServerList := SQLServer.ListAvailableSQLServers; for i := 1 to Serverlist.Count do list.Add(Serverlist.item(i)); Result := True; finally SQLServer := NULL; ServerList := NULL; end; end;
下载一个RegMon,然后启动SQL Server安装软件,监视它访问哪些注册表项。
我知道是通过查注册表,但具体怎么做就不清楚,所以想请教有经验的朋友。
delphi在Comobj单元中提供了一个SQLDMO,查出的网络机器名和本机的名字比
较就可以得到指定的计算机是否装了SQl server;下面给出了获得所有已装
SQl server的代码:只要获得本地的名字,进行比较就行了
procedure TForm1.Button1Click(Sender: TObject);
var
SQLServer:Variant;
ServerList:Variant;
i,nServers:integer;
sRetValue:String;
begin
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
for i := 1 to nservers do
ListBox1.Items.Add(ServerList.Item(i));
SQLServer:=NULL;
serverList:=NULL;
end;
function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
sRetValue: string;
SQLServer: Variant;
ServerList: Variant;
begin
Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to Serverlist.Count do
list.Add(Serverlist.item(i));
Result := True;
finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
但这两句出错:
—— SQLServer := NULL;
—— ServerList := NULL;
——我将SQLServer服务器停止后,也检测不到本机已装了SQLServer。而且有内存错误。
procedure TDBBakResFrm.GetSQLServerLsit;
var
SQLServer: Variant; //===保存SQL Server服务器对象
ServerList: Variant; //===保存SQL Server服务器名列表
i, nServers: integer; //===记录服务器个数
begin
Cb_SQLSrvList.Items.Clear; //===清空下拉列表
try
SQLServer := CreateOleObject('SQLDMO.Application'); //===创建SQL Server对象
ServerList := SQLServer.ListAvailableSQLServers; //===保存所有SQL Server服务器列表信息
nServers := ServerList.Count; //===记录局域网内有多少个SQL Server服务器
for i := 1 to nServers do //===用For循环一个个加进下拉列表Cb_SQLSrvList中
Cb_SQLSrvList.Items.Add(ServerList.Item(i)); //把网内所有SQL服务添加到下拉列表中
Cb_SQLSrvList.ItemIndex := 0; //===设置下拉列表第一项为默认值
SQLServer := NULL; //===还原变量
serverList := NULL; //===还原变量
except
MessageBox(Handle,'您当前的机器没有安装SQL Server,无法导入SQL Server服务器列表,'+#13+#10+'请直接输入SQL Server服务器名称!','信息提示',MB_OK + MB_ICONINFORMATION);
end;
end;
serverList := NULL; //===还原变量这两句没有问题吗?应该用nil吧!!!