Lotus и Oracle (ODBC)

  • Автор темы Автор темы Sandro
  • Дата начала Дата начала
S

Sandro

Привет всем!
Не могу подключиться к Odbc C вводом пароля...
Подключаюсь к Оракловой базе при помощи родного(Ораклового) ODBC драйвера:
Код:
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 никогда раньше не работал, а тут особо вариантов нет,приходится использовать),делаю по мануалу, ничего не получается ((((
У кого нить есть пример подключения к Ораклу с вводом логина и пароля ???
 



может поможет.
К Sybase Call con.ConnectTo ("Provider=MSDASQL;DSN= название источника данных;SRVR=сервер;DB=название базы;UID=логин; PWD=пассворд")
 
:KillMe: Блин, в мануалах всё просто, делаю "DSN=название odbc источника;DBQ =имя в tnsnames;UID=пользователь;PWD=пароль" и ничего (((( Ну может кто нибудь реально к Ораклу цеплялся ????
 
Если еще актуально !
создайте днс подключение на том компе от куда работать все это должно,
вот кусок кода конекчусь к SQL также и к дб2 думаю оракл ламаться не будет :

Код:
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
 
Актуально ))) Спасиб, сегодня попробую
 
Привет всем! в LN 6.5, 7. Скрипт запускаю локально.
Цепляюсь через odbc, 10 драйвер к ораклу. Далее выполняется sql запрос. Потом обрабатываю.
Стандартный код:

Код:
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 переходится на след. строку. Подскажите плз как с этим бороться!!
 
почему цикл не такой
Do While Not result.IsEndOfData
doc.field=result.GetValue("value")
result.NexRow
Loop
 
так тоже не работает, на строках
result.NextRow
Loop
прибавляет оба раза по одному
 
тогда я не понял - чего прибавляет?
надо с примером что должно быть, что получается
 
Так ты постоянно затираешь значение doc.field при обходе каждой строки
Если хочешь, чтобы все в одно поле собралось, то используй
Do
result.NextRow
doc.field=arrayappend(doc.field,result.GetValue("value"))
Loop Until result.IsEndOfData
 
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 снова переход на след. строку хотя
этого не должно быть.

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

Да нет , док я использовал просто для примера, какая разница куда записывать в док или в ексель, в данном случае я гружу в ексель
 
может "переход" на операции чтения, а не проверки?
тогда убрать NextRow
 
Karlosss, попробуй так

Код:
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
 
Karlosss, попробуй так

Код:
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

Спасибо! Так получилось. Я правда нашел обходной путь , но довольно коряво , а таким образом все красиво отрабатывает.
 
Вот и славно. На сколько я помню, твоя проблема лечится Rs.CacheLimit=DB_NONE, а остальные извраты для других проблем.
 
У меня выглядит примерно так и всё работает:
Код:
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
 
@Xalet, я так понимаю что "oracle" - это настроенное подключение? вот как раз этого и хотелось избежать
 
Последнее редактирование модератором:
Еще вариант, без программного подключения к oracle

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!