Lotus и SQLDMO

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 20 май 2009.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Вот сижу мучаюсь.... есть задача найти все доступные MSSQL-сервера в сети.
    В нете нашел вот такой пример
    Код (Text):
    Public Function AvailableSQLServers() As String()
    '***********************************************
    'PURPOSE:     Returns array list name of all SQL Servers
    '             on the network that are visible to the
    '             machine
    '
    'RETURNS:     String array containing names of all
    '             available SQL Servers (or an array with one
    '             element containing empty string if no
    '             SQL Servers are available/visible)

    'REQUIRES:   Reference to Microsoft SQLDMO object library
    '             VB6 Because array is returned
    '             Assumes Option Base is not set to 1
    '             If you don't have VB6, and/or Option Base 1
    '             is set, it should not be very hard to modify
    '             this code for you own purposes

    'EXAMPLE:
    'Dim sServers() As String
    'Dim iCtr As Integer

    'sServers = AvailableSQLServers
    'If sServers(0) = "" Then
    '   MsgBox "No SQL Servers Available"
    'Else
    '   For iCtr = 0 To UBound(sServers)
    '     Debug.Print sServers(iCtr)
    '  Next
    'End If
    '***********************************************
    Dim oServer As New SQLDMO.Application
    Dim oNameList As SQLDMO.NameList
    Dim iElement As Integer
    Dim sAns() As String
    Dim lCtr As Long, lCount As Long

    On Error GoTo ErrorHandler

    ReDim sAns(0) As String
    Set oNameList = oServer.ListAvailableSQLServers

    With oNameList
    lCount = .Count
    If lCount > 0 Then
    For lCtr = 1 To .Count
    iElement = IIf(sAns(0) = "", 0, UBound(sAns) + 1)
    ReDim Preserve sAns(iElement) As String
    sAns(iElement) = oNameList.Item(lCtr)
    Next
    End If
    End With

    AvailableSQLServers = sAns
    Exit Function

    ErrorHandler:
    'Return array with one empty element on error
    ReDim sAns(0) As String
    AvailableSQLServers = sAns
    End Function
    Но переделать его под скрипт не получается
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    имхо, мало инфы. А в чем собственно проблемы с кодом, что-то вообще делали?
    вылезают какие-то ошибки при инициализации объекта "SQLDMO.Application"?
    Был как-то по моей задаче кусок кода для работы с одним API, все нужные компоненты были установлены и описалки констант были, так особых проблем переделки под скрипт не заметила.
    Для начала нужно описать SQLDMO-объекты без New, просто As Variant. И попытаться создать объект "SQLDMO.Application" через CreateObject.
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    OKEN
    Это понятно... я же написал что пример не для скрипта

    это понятно... делаю так
    Код (Text):
    Set oServer = CreateObject( "SQLDMO.Application" )
    Set oNameList = CreateObject( "SQLDMO.NameList" )
    ошибка во второй строке
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а в примере выше было

    Код (Text):
    Set oNameList = oServer.ListAvailableSQLServers
    может стоит оставить так же?..
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    пробовал... не получается...
    Сейчас вот читаю по этому объекту... что-то ListAvailableSQLServers не нахожу
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    я не знаю поможет ли... у меня объект SQLDMO.Application не создается... видать надо что-то ставить...

    Код (Text):
    Public Function AvailableSQLServers() As Variant
    Dim oServer As Variant
    Dim oNameList As Variant
    Dim sAns As Variant

    Set oServer = CreateObject("SQLDMO.Application")

    On Error Goto ErrorHandler

    Set oNameList = oServer.ListAvailableSQLServers()

    With oNameList
    lCount = .Count
    If lCount > 0 Then
    For lCtr = 1 To .Count
    If Isarray(sAns) Then
    Redim Preserve sAns (Lbound(sAns) To Ubound(sAns) + 1)
    Else
    Redim sAns (0 To 0)
    End If
    sAns(Ubound(sAns)) = oNameList.Item(lCtr)
    Next
    End If
    End With

    AvailableSQLServers = sAns
    Exit Function

    ErrorHandler:
    'Return array with one empty element on error
    Redim sAns(0) As String
    AvailableSQLServers = sAns
    End Function
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    C кодом Akupaka согласна, в принципе :)
    но где-то по ходу ссылки попадались, что ListAvailableSQLServers глючил. И еще, что его убрать могут в след. версиях
    Хотела найти альтернативу - не нашла
    я не смогу посмотреть, нет этих компонентов...
    Вот что для 2000 по этому методу, например:
    http://msdn.microsoft.com/en-us/library/aa...42(SQL.80).aspx
    кстати, если не получится самому разобраться, может, стоит указать, что за ошибка (это большой секрет?) и погуглить по ней, есть ведь в коде обработчик.
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    OKEN Akupaka
    Спасибо!!! С этим уже разобрался. Буду ковырять дальше!
     
  9. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    проблемы продолжаются.... :)
    Оказалось получить список серверов легче всего
    теперь пытаюсь соединиться с сервером
    Код (Text):
        Set oServer = CreateObject( "SQLDMO.SQLServer" )
    oServer.LoginSecure = True
    oServer.Connect ServerName
    в итоге ошибка с предложение использовать SQL Server Management Studio
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    гы, тут, вероятно, МС решило ограничить пользователей ))
    расскажи задачу, может кто подскажет что-то интересное...
     
  11. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ну, раз тишина - мои "5 копеек".
    может, и не в тему (искать влом), но рассмотрите как вариант: возможно, у Connect есть какие-то еще нужные параметры, которые не указаны. Или настройки, необходимые перед его вызовом.
    встречались траблы из-за параметра(ов?) какого-то метода (не Connect), который вроде не был обязателен, но требовался (явно быть в наличии) для моей задачи :)
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Прошу прощения.... дома инета не было.
    Задача: получить перечень возможных баз данных на сервере.

    OKEN
    Праметры Connect имя сервера, имя пользователя и пароль. Последние два не обязательны, если нужна аутентификафия по виндовому логину.
    А вот oServer.LoginSecure = True и есть переключение на аутентификацию по виндовому логину
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а если не использовать аутентификацию системы, а указать принудительно?..
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    придительно не есть хорошо :unsure:
    Пароли меняются каждый месяц....
     
  15. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    хорошо или нет, я не интересовался :unsure:
    нужно проверить подключается ли оно хоть как-то!
    если будет только принудительно подключатся, то это уже плохо, но можно сделать свою форму для аутентификации...
     
  16. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Пробовал... не подключается никак :)
    Все та же ошибка

    Сделать можно все... но овчинка выделки не стоит... хотел обойтись минимальными затратами.
     
  17. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    java не предлагает подобных решений? :)
    где наши знатоки?.. ;)

    а с помощью LotusScript Extensions for Lotus Connectors (LC LSX) нельзя решить задачу?..
    виндошная аутентификация (по крайней мере на MS SQL) там возможна точно.
    в хэлпе описан метод, который делает что-то похожее на твою задачу, правда, я им не пользовался...

    LCConnection.Catalog
    Produce a result set containing a list of servers, databases, tables or views, indexes, or fields in a table, that are available through this connection. Each record in the result set describes one server, database, table, and so on.
     
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Сделал!
    Список серверов получаю через SQLDMO
    А для баз пользуюсь ADO. Ну и далее все манипуляции с данными проходят через ADO
     
Загрузка...

Поделиться этой страницей