Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа? / 4 сообщений из 4, страница 1 из 1
22.09.2012, 21:32
    #37968417
serg-01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа?
Ранее работал только с отдельными БД на сервере
Ср-ва Vb6, SQL Server 2005
Прописывался через ODBC с конкретной базой на конкретном сервере.
Теперь надо определить размер всех БД на каждом из существующих серверов, их более 30
Не мог найти, как получить список всех сколько серверов
ранее соединялся только с таблицами БД через Ado
Можно ли и как получить список всех серверов и затем в цикле их анализировать
что нить типа

For i =0 To Кол-во_Серверов
Имя_ серв=Кол-во_Серверов(i)
...соединение с например БД мастер на Имя_ серв
...вызов хранимой процедуры SQL
...обработка результатов
next

Или здесь нужен совсем другой подход?
Работаю с SQL недавно, во многое еще не въехал, буду признателен за разъяснение
...
Рейтинг: 0 / 0
22.09.2012, 21:50
    #37968425
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа?
serg-01,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    Dim oApp, oNameList, nCount, i
    Set oApp = CreateObject("SQLDmo.Application")
    Set oNameList = oApp.ListAvailableSQLServers()
    nCount = oNameList.Count
    For i = 0 To nCount
        Debug.Print oNameList.Item(nCount)
    Next


и в целом, многие вещи по обслуживанию СКЛ Серверов, можно делать с помощью SQLDmo
...
Рейтинг: 0 / 0
22.09.2012, 22:16
    #37968442
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа?
вот ещё что ...
посмотрел как такая "фишка" у меня сделана, так вот там НЕ через SQLDmo
а причина, вроде как то, что эту либу нужно ставить дополнительно, если на машине не установлен сервер

в таком случае, проще так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Private Const SQL_HANDLE_DBC As Integer = 2
Private Const SQL_SUCCESS As Integer = 0
Private Const SQL_SUCCESS_WITH_INFO As Integer = 1

Private Declare Function SQLAllocEnv Lib "odbc32.dll" (ByRef phenv As Long) As Integer
Private Declare Function SQLAllocHandle Lib "odbc32.dll" (ByVal hType As Integer, ByVal hInput As Long, ByRef phOutput As Long) As Integer
Private Declare Function SQLBrowseConnect Lib "odbc32.dll" (ByVal hDbc As Long, ByVal szConnStrIn As String, ByVal cbConnStrIn As Integer, ByVal szConnStrOut As String, ByVal cbConnStrOutMax As Integer, ByRef pcbconnstrout As Integer) As Integer
Private Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal hDbc As Long) As Integer
Private Declare Function SQLFreeConnect Lib "odbc32.dll" (ByVal hDbc As Long) As Integer
Private Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal hEnv As Long) As Integer

Public Function GetSQLServersArray() As Variant ' array of strings indeed
   GetSQLServersArray = Split(GetSQLServersCommaList, ",")
End Function

Public Function GetSQLServersCommaList() As String
  Const ODBC_ERR_MSG = "Failed ODBC call. Possible, you need reinstall the latest MDAC"

  Dim retCode As Integer
  Dim hDbc As Long
  Dim hEnv As Long
  Dim strCon As String
  Dim strOutCon As String
  Dim intConLenOut As Integer
  Dim lngPz1 As Long
  Dim lngPz2 As Long
  
  strCon = "DRIVER={SQL Server};"
  strOutCon = Space$(10000)
  retCode = SQLAllocEnv(hEnv)
  If retCode <> SQL_SUCCESS And retCode <> SQL_SUCCESS_WITH_INFO Then
     MsgBox ODBC_ERR_MSG
     Exit Function
  End If
  retCode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, hDbc)
  If retCode <> SQL_SUCCESS And retCode <> SQL_SUCCESS_WITH_INFO Then
     MsgBox ODBC_ERR_MSG
     Exit Function
  End If
  retCode = SQLBrowseConnect(hDbc, strCon, Len(strCon), strOutCon, Len(strOutCon) + 2, intConLenOut)
  strOutCon = Left$(strOutCon, intConLenOut)
  lngPz1 = InStr(strOutCon, "Server={")
  If lngPz1 > 0 Then
     lngPz1 = lngPz1 + 8
     lngPz2 = InStr(strOutCon, "}")
     If lngPz2 > lngPz1 Then
        GetSQLServersCommaList = Replace(Mid$(strOutCon, lngPz1, lngPz2 - lngPz1), ",", ";")
     End If
  End If
  retCode = SQLDisconnect(hDbc)
  retCode = SQLFreeConnect(hDbc)
  retCode = SQLFreeEnv(hEnv)
End Function
...
Рейтинг: 0 / 0
22.09.2012, 23:35
    #37968473
serg-01
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа?
qwerty112,
Спасибо, это новое для меня, обязательно попробую и сообщу о результатах
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как средствами VB определить кол-во серверов SQL и их имен для дальнейшего анализа? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]