Lotus и Oracle (ODBC)

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

  1. Sandro

    Sandro Гость

    Привет всем!
    Не могу подключиться к Odbc C вводом пароля...
    Подключаюсь к Оракловой базе при помощи родного(Ораклового) ODBC драйвера:
    Код (LotusScript):
    Dim con As New ODBCConnection
    Dim qry As New ODBCQuery
    Dim res As New ODBCResultSet
    con.ConnectTo(datasource)
    Всё нормально появляется окошко, вводим логин и пароль, всё работает
    теперь надо подключиться с известным логином и паролем автоматически, в примерах делают так con.ConnectTo(datasource,login,password), не получается, я так понимаю, надо ввести определённый ConnectionString (с ODBC никогда раньше не работал, а тут особо вариантов нет,приходится использовать),делаю по мануалу, ничего не получается ((((
    У кого нить есть пример подключения к Ораклу с вводом логина и пароля ???
     
  2. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
  3. Sandro

    Sandro Гость

    :KillMe: Блин, в мануалах всё просто, делаю "DSN=название odbc источника;DBQ =имя в tnsnames;UID=пользователь;PWD=пароль" и ничего (((( Ну может кто нибудь реально к Ораклу цеплялся ????
     
  4. ZhAN

    ZhAN Гость

    Если еще актуально !
    создайте днс подключение на том компе от куда работать все это должно,
    вот кусок кода конекчусь к SQL также и к дб2 думаю оракл ламаться не будет :

    Код (LotusScript):
    Option Public
    Option Explicit
    Uselsx "*LSXODBC"
     
    Const ODBC_SOURCE = "ДНС-НАЗВАНИЕ"
    Const ODBC_LOGIN = "ПОЛЬЗОВАТЕЛЬ"
    Const ODBC_PASSWORD = "ПАРОЛЬ"
     
    Dim SQLconnection As New ODBCConnection
    Dim SQLquery As New ODBCQuery
    Dim SQLresult As New ODBCResultSet
    Dim query As String
    Set SQLquery.Connection = SQLconnection
    Set SQLresult.Query = SQLquery
    Call SQLconnection.ConnectTo(ODBC_SOURCE, ODBC_LOGIN, ODBC_PASSWORD)
    query = {ЗАПРОС}
    SQLquery.SQL = query
    If SQLresult.Execute Then
    '...
    End If
     
  5. Sandro

    Sandro Гость

    Актуально ))) Спасиб, сегодня попробую
     
  6. Karlosss

    Karlosss Гость

    Привет всем! в LN 6.5, 7. Скрипт запускаю локально.
    Цепляюсь через odbc, 10 драйвер к ораклу. Далее выполняется sql запрос. Потом обрабатываю.
    Стандартный код:

    Код (LotusScript):
    Call con.ConnectTo("","","") 'подключение к ODBC
    status = con.ConnectTo ("")
    If Status = False Then
    Messagebox "Не могу подключиться к источнику данных ODBC: " + odb, 16, "Внимание !!!"
    Exit Sub
    End If

    Set qry = New ODBCQuery
    Set result = New ODBCResultSet
    Set qry.Connection = con
    Set result.Query = qry
    qry.SQL= {SELECT     * }

    If Not result.Execute Then
    Messagebox result.GetExtendedErrorMessage,,result.GetErrorMessage
    Call result.Close(DB_CLOSE)
    Call con.Disconnect
    Exit Sub
    End If

    result.cacheLimit =DB_ALL

    Do
    result.NextRow

    doc.field=result.GetValue("value")
    ..........................     

    Loop Until result.IsEndOfData
    Call result.Close(DB_CLOSE)
    Call con.Disconnect
    Как здесь скрипт считает строки. Когда входит в цикл на строчке result.NextRow все в порядке берется 1 строка.Далее проходим 1 круг и в конце круга на Loop Until result.IsEndOfData счетчик переходит на следующую строку и далее на строке result.NextRow снова прибавляется еще одна строка. В итоге данные записываются в Lotus через строку. Не понимаю почему в конце круга на строке Loop Until result.IsEndOfData переходится на след. строку. Подскажите плз как с этим бороться!!
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    300
    почему цикл не такой
    Do While Not result.IsEndOfData
    doc.field=result.GetValue("value")
    result.NexRow
    Loop
     
  8. Karlosss

    Karlosss Гость

    так тоже не работает, на строках
    result.NextRow
    Loop
    прибавляет оба раза по одному
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    300
    тогда я не понял - чего прибавляет?
    надо с примером что должно быть, что получается
     
  10. Darker

    Darker Гость

    Так ты постоянно затираешь значение doc.field при обходе каждой строки
    Если хочешь, чтобы все в одно поле собралось, то используй
    Do
    result.NextRow
    doc.field=arrayappend(doc.field,result.GetValue("value"))
    Loop Until result.IsEndOfData
     
  11. Karlosss

    Karlosss Гость

    Do
    result.NextRow - счетчик строк оракла 2+1=3 - цикл второй круг

    Выгружаем строку в excel счетчик строк оракла =1 - начало, вхождение в цикл

    строка в excel=строка в оракловой базе - 1 круг цикла в 1 строку в excel записывает 1 строку оракла
    строка в excel=строка в оракловой базе - 2 круг цикла в 2 строку в excel записывает 3 строку оракла

    ..........................

    Loop Until result.IsEndOfData счетчик строк оракла 1+1=2
    Call result.Close(DB_CLOSE)
    Call con.Disconnect

    так происходит потому что на строчке кода Loop Until result.IsEndOfData
    происходит переход на след. строку и дальше на строке кода result.NextRow снова переход на след. строку хотя
    этого не должно быть.

    Добавлено:
    Да нет , док я использовал просто для примера, какая разница куда записывать в док или в ексель, в данном случае я гружу в ексель
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    300
    может "переход" на операции чтения, а не проверки?
    тогда убрать NextRow
     
  13. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Karlosss, попробуй так

    Код (Text):
    Rs.CacheLimit=DB_NONE
    Rs.Execute
    If Not Rs.IsResultSetAvailable Then Error ...
    If Rs.FirstRow Then      
    Do
    ...
    If Rs.IsEndOfData Then If Rs.IsEndOfData Then Exit Do 'so need
    Rs.NextRow
    Loop
    End If
     
  14. Karlosss

    Karlosss Гость

    Спасибо! Так получилось. Я правда нашел обходной путь , но довольно коряво , а таким образом все красиво отрабатывает.
     
  15. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Вот и славно. На сколько я помню, твоя проблема лечится Rs.CacheLimit=DB_NONE, а остальные извраты для других проблем.
     
  16. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    431
    Симпатии:
    10
    а вот эту строку можно написать как коннекшен стринг?? а то сколько не пытался не получается(( а всем прописывать odbc настройки - как то ломает(
     
  17. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    У меня выглядит примерно так и всё работает:
    Код (LotusScript):

    Set con = New LCConnection("oracle")
     
    con.Server = conServer
    con.Userid = conUser
    con.Password = conPswd
    con.Connect
     
    qry = {SELECT * ...}
    Call Con.Execute (qry, result)
    While continue
    If  (con.Fetch (result) > 0) Then
    total_entries = total_entries +1
    Else
    continue = False
    End If
    Wend
     
  18. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    431
    Симпатии:
    10
    @Xalet, я так понимаю что "oracle" - это настроенное подключение? вот как раз этого и хотелось избежать
     
    #18 swyatogor, 22 сен 2015
    Последнее редактирование модератором: 23 сен 2015
  19. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    51
    JDBC :)
     
    3 пользователям это понравилось.
  20. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Еще вариант, без программного подключения к oracle

    Купить LEI
    настроить
    гнать как хочется в промежуточную LN базу
    обрабатывать как требуется
    =)
     
Загрузка...

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