谢谢
解决方案 »
- Listview控件排序 ?
- 關於activereport調用sql2000存儲過程的呾
- (关于Sapi5.0的问题,希望用过的人给点建议!谢谢了!)
- 各位同人:帮帮小弟一个忙,这关系着小弟的一身幸福。可以的话帮助小弟解答
- 女友跟人跑路了,以后CSDN就是我的家
- FOXPRO数据库的删除恢复问题
- 我用visual CHM工具自己做了一个帮助文件。 如何用F1跳到对应的主题上?
- 关于VB中搜索数据库的问题!!!
- treeview 问题大全(数据库、背景图、资源信息)
- 有人能帮我一个忙吗?把一个关于工资程序的源码吗?多谢多谢!!!!
- 如何在VB6中通过菜单打开.hlp格式的文件
- ◆LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF
引用 Microsoft SQLDMO Object Library'CODE
Option ExplicitPrivate Sub Command1_Click()
On Error GoTo Err1
Dim dmoObj As New SQLDMO.Application
Dim I As Long
For I = 1 To dmoObj.ListAvailableSQLServers.Count
List1.AddItem dmoObj.ListAvailableSQLServers.Item(I)
Next
Err1:
End Sub
http://www.applevb.com/sourcecode/getallserveronnet.zip
'1, 可取得域或工作组内所有的SqlServer服务器名
'2, 取得各项网络设置Option ExplicitPrivate uNet() As NETRESOURCE_REAL'取得SqlServer服务器名
'返回的服务器名用","相隔
Public Function GetSQLServers() As String
Dim l As Long
Dim entriesread As Long
Dim totalentries As Long
Dim hREsume As Long
Dim bufptr As Long
Dim level As Long
Dim prefmaxlen As Long
Dim lType As Long
Dim domain() As Byte
Dim sv100 As SV_100
Dim strReturnValue As String
Dim strDomainList As String '取得的域或工作组列表,用","格开
Dim iPos As Integer
Dim i As Integer
Dim strPart As String level = 100
prefmaxlen = -1
lType = SV_TYPE_SQLSERVER
strDomainList = GetDomain()
i = 1
Do
iPos = InStr(i, strDomainList, ",")
If iPos = 0 Then
strPart = Mid(strDomainList, i, Len(strDomainList))
Else
strPart = Mid(strDomainList, i, iPos - i)
End If
domain = strPart & vbNullChar
l = NetServerEnum(ByVal 0&, _
level, _
bufptr, _
prefmaxlen, _
entriesread, _
totalentries, _
lType, _
domain(0), _
hREsume)
If l = 0 Or l = 234& Then
For i = 0 To entriesread - 1
CopyMemory sv100, ByVal bufptr, Len(sv100)
If strReturnValue = "" Then
strReturnValue = Pointer2Stringw(sv100.name)
Else
strReturnValue = strReturnValue & "," & Pointer2Stringw(sv100.name)
End If
bufptr = bufptr + Len(sv100)
Next i
End If
i = iPos + 1
Loop Until iPos = 0 NetApiBufferFree bufptr
GetSQLServers = strReturnValue
End Function'指针转换为字符串
Private Function Pointer2Stringw(ByVal l As Long) As String
Dim Buffer() As Byte
Dim nLen As Long
nLen = lstrlenW(l) * 2 If nLen Then
ReDim Buffer(0 To (nLen - 1)) As Byte
CopyMemory Buffer(0), ByVal l, nLen
Pointer2Stringw = Buffer
End If
End Function
Private Sub GetNetworkSetting()
Const MAX_RESOURCES = 256
Const NOT_A_CONTAINER = -1
Dim bFirstTime As Boolean
Dim lReturn As Long
Dim hEnum As Long
Dim lCount As Long
Dim lMin As Long
Dim lLength As Long
Dim l As Long
Dim lBufferSize As Long
Dim lLastIndex As Long
Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
bFirstTime = True
Do
If bFirstTime Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, _
RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
bFirstTime = False
Else
If uNet(lLastIndex).dwUsage _
And RESOURCEUSAGE_CONTAINER Then
lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, _
RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, _
uNet(lLastIndex), hEnum)
Else
lReturn = NOT_A_CONTAINER
hEnum = 0
End If
lLastIndex = lLastIndex + 1
End If
If lReturn = NO_ERROR Then
lCount = RESOURCE_ENUM_ALL
Do
lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
lReturn = WNetEnumResource(hEnum, lCount, _
uNetApi(0), lBufferSize)
If lCount > 0 Then
ReDim Preserve uNet(0 To lMin + lCount - 1) _
As NETRESOURCE_REAL
For l = 0 To lCount - 1
'Each Resource will appear here as uNet(i)
uNet(lMin + l).dwScope = uNetApi(l).dwScope
uNet(lMin + l).dwType = uNetApi(l).dwType
uNet(lMin + l).dwDisplayType = _
uNetApi(l).dwDisplayType
uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
If uNetApi(l).pLocalName Then
lLength = lstrlen(uNetApi(l).pLocalName)
uNet(lMin + l).sLocalName = _
Space$(lLength)
CopyMem ByVal uNet(lMin _
+ l).sLocalName, _
ByVal uNetApi(l).pLocalName, lLength
End If
If uNetApi(l).pRemoteName Then
lLength = lstrlen( _
uNetApi(l).pRemoteName)
uNet(lMin + l).sRemoteName = _
Space$(lLength)
CopyMem ByVal uNet(lMin + _
l).sRemoteName, _
ByVal uNetApi(l).pRemoteName, lLength
End If
If uNetApi(l).pComment Then
lLength = lstrlen(uNetApi(l).pComment)
uNet(lMin + l).sComment = _
Space$(lLength)
CopyMem ByVal uNet(lMin + l).sComment, _
ByVal uNetApi(l).pComment, lLength
End If
If uNetApi(l).pProvider Then
lLength = lstrlen(uNetApi(l).pProvider)
uNet(lMin + l).sProvider = _
Space$(lLength)
CopyMem ByVal uNet(lMin + l).sProvider, _
ByVal uNetApi(l).pProvider, lLength
End If
Next l
End If
lMin = lMin + lCount
Loop While lReturn = ERROR_MORE_DATA
End If
If hEnum Then
l = WNetCloseEnum(hEnum)
End If
Loop While lLastIndex < lMin
End Sub'从网络的各项配置中取得Domain名称,各Domain名用","格开
Public Function GetDomain() As String
Dim DomainList As String
Dim l As Long
DomainList = ""
Call GetNetworkSetting
If UBound(uNet) > 0 Then
For l = 0 To UBound(uNet)
If uNet(l).dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN Then
If DomainList = "" Then
DomainList = uNet(l).sRemoteName
Else
DomainList = DomainList & "," & uNet(l).sRemoteName
End If
End If
' Select Case uNet(l).dwDisplayType
' Case RESOURCEDISPLAYTYPE_DIRECTORY&
' Debug.Print "Directory...",
' Case RESOURCEDISPLAYTYPE_DOMAIN
' Debug.Print "Domain...",
' Case RESOURCEDISPLAYTYPE_FILE
' Debug.Print "File...",
' Case RESOURCEDISPLAYTYPE_GENERIC
' Debug.Print "Generic...",
' Case RESOURCEDISPLAYTYPE_GROUP
' Debug.Print "Group...",
' Case RESOURCEDISPLAYTYPE_NETWORK&
' Debug.Print "Network...",
' Case RESOURCEDISPLAYTYPE_ROOT&
' Debug.Print "Root...",
' Case RESOURCEDISPLAYTYPE_SERVER
' Debug.Print "Server...",
' Case RESOURCEDISPLAYTYPE_SHARE
' Debug.Print "Share...",
' Case RESOURCEDISPLAYTYPE_SHAREADMIN&
' Debug.Print "ShareAdmin...",
' End Select
' Debug.Print uNet(l).sRemoteName, uNet(l).sComment
Next l
End If
GetDomain = DomainList
End Function
set clsSqlServer =new CSqlServerstrSqlServer=clsSqlServer.GetSQLServers()strSqlServer得到局域网内所有的sqlserver服务器名,之间用,隔开