注:本机没有安装sql server的客户端或者服务器端,所以使用'SQLDMO.Application'创建对象的方法好像不可行。还有没有其他方法???
解决方案 »
- wm_lbuttonUp消息的响应代码和OnClick事件的响应代码 谁先执行?可以让前者先吗?
- 哪位大哥有可用分给我一些吧
- 子窗体的grid点击复制后,grid外面的Tedit不能获得焦点(继续等)。动态创建子窗体在panel上,打开子窗体时出现桌面闪烁(已解决)。
- 随机选数问题(得解就给分)
- 打印的简单问题!
- dll 窗口 调用 非模态窗口
- CSDN的合订本我买了,还差一期啊
- 谁在Mandrake 8.1下运行Kylix成功了?
- 请问time string 转换成systemtime 如何转换?
- 如何在Delphi中实现网络文件的分段下载
- 怎样在DBGrid的某个单元格中加一个小按钮?
- Tstringgrid滚动问题?在线等待!高分请教!
var
SQLServer:Variant;
ServerList:Variant;
i,nServers:integer;
sRetValue:String;
begin
//列举局域网内所有的SQL服务器
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
Combobox1.Items.Clear;
for i := 1 to nservers do
ComboBox1.Items.Add(ServerList.Item(i));
SQLServer:=NULL;
serverList:=NULL;
//默认
Combobox1.ItemIndex:=0;
end;
如果在nt, 2k, xp下,可用如下解法:
const
SV_TYPE_SQLSERVER = $00000004;
type
pDword = ^DWord;
NET_API_STATUS = DWORD;
SERVER_INFO_100 = record
sv100_platform_id : DWord;
sv100_name : pwidechar;
end; PSERVER_INFO_100 = ^SERVER_INFO_100;
LPSERVER_INFO_100 = ^SERVER_INFO_100;
ASERVER_INFO_100 = array of SERVER_INFO_100; SERVER_INFO_101 = record
sv101_platform_id : dword;
sv101_name : pwidechar;
sv101_version_major : Dword;
sv101_version_minor : Dword;
sv101_type : dword;
sv101_comment : pchar;
end; PSERVER_INFO_101 = ^SERVER_INFO_101;
LPSERVER_INFO_101 = ^SERVER_INFO_101;
ASERVER_INFO_101 = array of SERVER_INFO_101;
function NetServerEnum(servername : pchar; level : Dword; var bufptr;
prefmaxlen : integer; entriesread : pDword; totalentries : pDword;
servertype : DWord; domain : pwidechar; resume_handle : integer)
: NET_API_STATUS; stdcall; external 'netapi32.dll' name 'NetServerEnum';function NetApiBufferFree (Buffer : pointer) : NET_API_STATUS;
stdcall; external 'netapi32.dll' name 'NetApiBufferFree';
procedure EnumNetwork(ts: TStrings);
var
pBuf : pByte;
aBuf : ASERVER_INFO_100;
dwEntriesRead : DWORD;
dwTotalEntries : DWORD;
dwServerType : DWORD;
i : DWORD;
name : string;
begin
pBuf := nil;
dwEntriesRead := 0;
dwTotalEntries := 0;
dwServerType := SV_TYPE_SQLSERVER; // all servers NetServerEnum(nil, 100, pBuf, -1,
@dwEntriesRead, @dwTotalEntries, dwServerType, nil, 0); aBuf := ASERVER_INFO_100(pBuf); for i := 0 to dwEntriesRead - 1 do
begin
name := aBuf[i].sv100_name;
ts.add(name);
// name is the name of the SQL Server in the network
end;
if Assigned(pBuf) then NetApiBufferFree(pBuf);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
EnumNetwork(ListBox1.items);
end;
忘记了是哪里找来的
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
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;
转贴,测试通过
用1.udl连接。如果连接不上调用
ShellExecute(0, nil, 'C:\Documents and Settings\Administrator\My Documents\1.udl', nil, nil, 1);
设置。点确定自动将设置保存在1.udl中。
先创建一个文本文件改为 1.udl (随便取个名称)。双击打开设置一下,分发。
用1.udl连接。如果连接不上调用
ShellExecute(0, nil, 'C:\Documents and Settings\Administrator\My Documents\1.udl', nil, nil, 1);
设置。点确定自动将设置保存在1.udl中。
---------------------------------------------
这个已经考虑过,并被pass掉了。等待中......
下面的网站上有调用接口的例子。
http://www.588188.com/netbook/tech/VC/html/vc.ohchina.125.htm
UDL调用的是OLEDB32.DLL
下面的网站上有调用接口的例子。
http://www.588188.com/netbook/tech/VC/html/vc.ohchina.125.htm
-------------------------------------------谢谢你一直的关注,你给的这个连接的文章,也只是讲如何在程序中跳出这个对话框,我想delphi的ADO控件就是这样做的。 但是还是没有办法了解它内部到底用了怎样的api函数。