sql server服务器列表?和网上领居浏览窗
1 如果电脑没有装sql server怎么在listbox中获在sql server服务器列表?
2 怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?
问题点数:0、回复次数:13Top
1 楼zv008(zv)回复于 2004-11-01 14:45:45 得分 0
你是不是要做一个数据库安装程序?Top
2 楼zv008(zv)回复于 2004-11-01 14:46:45 得分 0
给个过程你:
procedure GetSQLServerLsit;
var
SQLServer: Variant;
ServerList: Variant;
i, nServers: integer;
begin
lst_SQLSrvList.Items.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
nServers := ServerList.Count;
for i := 1 to nservers do
lst_SQLSrvList.Items.Add(ServerList.Item(i));
SQLServer := NULL;
serverList := NULL;
except
Application.MessageBox('您当前的机器没有安装SQL Server,无法导入SQL Server服务器列表,' + #13 + #10 + '请直接输入SQL Server服务器名称!', '信息提示', MB_OK +
MB_ICONINFORMATION);
end;
end;Top
3 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2004-11-01 15:05:29 得分 0
To zv008(zv)非常感谢你,对不起,说的不太清楚,是这样的:
1.一台电脑如果没有装SQL SERVER,用什么方法获得网络中SQL SERVER服务器列名并添加到listbox1
22 怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?
Top
4 楼Afei1(阿飞1)回复于 2004-11-01 15:35:20 得分 0
取得当前局域网中有装SQL SERVER或有相应的数据库服务器
procedure TMainCodeFrm.pGetServerName(var aCombox : TCombobox);
var
SQLServer: Variant;
ServerList: Variant;
i : integer;
begin
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
aCombox.Clear;
for i := 1 to ServerList.Count do
aCombox.Items.Add(ServerList.Item(i));
SQLServer := NULL;
serverList := NULL;
end;Top
5 楼zv008(zv)回复于 2004-11-01 15:57:41 得分 0
1、看看那段代码吧。没装sqlserver是不能取得列表的。
2、是不是要查找网上邻居上所有的计算机名?Top
6 楼lw549(那个孩子他爹)回复于 2004-11-01 16:06:09 得分 0
1.PromptDataSource(GetActiveWindow, '');Top
7 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2004-11-01 16:24:45 得分 0
To lw549(那个孩子他爹)不行吗,麻烦你,再看一看,谢谢Top
8 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2004-11-01 16:28:12 得分 0
to Afei1(阿飞1) 按你的方法,实现上是在有装SQL SERVER机上获取列表的.
to zv008(zv) 有何高见!第二题如同网上领居浏览对话框(如同DCOMconnection控件的computername属性)!Top
9 楼zv008(zv)回复于 2004-11-02 08:43:37 得分 0
给段代码你:
function SelectComputer: string;
var
WindowList: Pointer;
BrowseInfo: TBrowseInfo;
Buffer: PChar;
RootItemIDList, ItemIDList: PItemIDList;
ShellMalloc: IMalloc;
begin
Result := '';
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
begin
Buffer := ShellMalloc.Alloc(MAX_PATH);
try
RootItemIDList := nil;
SHGetSpecialFolderLocation(Application.Handle, CSIDL_NETWORK,
RootItemIDList);
with BrowseInfo do
begin
hwndOwner := Application.Handle;
pidlRoot := RootItemIDList;
pszDisplayName := Buffer;
lpszTitle := '选择机器名';
ulFlags := BIF_BROWSEFORCOMPUTER;
end;
WindowList := DisableTaskWindows(0);
try
ItemIDList := ShBrowseForFolder(BrowseInfo);
finally
EnableTaskWindows(WindowList);
end;
if ItemIDList <> nil then
begin
Result := StrPas(Buffer);
ShGetPathFromIDList(ItemIDList, Buffer);
ShellMalloc.Free(ItemIDList);
end;
finally
ShellMalloc.Free(Buffer);
end;
end;
end;Top
10 楼zv008(zv)回复于 2004-11-02 08:44:17 得分 0
从对话框返回的计算机名Top
11 楼lw549(那个孩子他爹)回复于 2004-11-02 09:07:08 得分 0
怎么不行?代码来自,我一直用这个的,不用sqlserver客户端
unit ADODB;
function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
var
DataInit: IDataInitialize;
DBPrompt: IDBPromptInitialize;
DataSource: IUnknown;
InitStr: PWideChar;
begin
Result := InitialString;
DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
if InitialString <> '' then
DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,
PWideChar(InitialString), IUnknown, DataSource);
DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
begin
InitStr := nil;
DataInit.GetInitializationString(DataSource, True, InitStr);
Result := InitStr;
end;
end;Top
12 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2004-11-02 09:41:13 得分 0
to lw549(那个孩子他爹) ,谢谢老师,我试了一下,打开了UDL链接文件.
谢谢老师。对不起,我表达的不够清楚,是在客户端的listbox1显示网络中所有的SQL SERVER服务器?(当客户端没有装SQL SERVER时)
2 怎么显示网上领居浏览窗(如同DCOMconnection控件的computername属性),单击主机名添加到 edit1.text中了?
Top
13 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2004-11-02 10:14:01 得分 0
楼上的几位兄弟,大多原理实际上是调用 SQLDEMO.dll这个动态链接库的。如果没有装就没有这个动态链接库,也就不动用 createoleobject('SQLDEMO.application');....Top




