• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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 никогда раньше не работал, а тут особо вариантов нет,приходится использовать),делаю по мануалу, ничего не получается ((((
У кого нить есть пример подключения к Ораклу с вводом логина и пароля ???
 
S

susinmn




может поможет.
К Sybase Call con.ConnectTo ("Provider=MSDASQL;DSN= название источника данных;SRVR=сервер;DB=название базы;UID=логин; PWD=пассворд")
 
S

Sandro

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

ZhAN

Если еще актуально !
создайте днс подключение на том компе от куда работать все это должно,
вот кусок кода конекчусь к 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
 
S

Sandro

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

Karlosss

Привет всем! в 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 переходится на след. строку. Подскажите плз как с этим бороться!!
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
почему цикл не такой
Do While Not result.IsEndOfData
doc.field=result.GetValue("value")
result.NexRow
Loop
 
K

Karlosss

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
тогда я не понял - чего прибавляет?
надо с примером что должно быть, что получается
 
D

Darker

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

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 снова переход на след. строку хотя
этого не должно быть.

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
может "переход" на операции чтения, а не проверки?
тогда убрать NextRow
 
T

TIA

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
 
K

Karlosss

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

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

TIA

Вот и славно. На сколько я помню, твоя проблема лечится Rs.CacheLimit=DB_NONE, а остальные извраты для других проблем.
 
X

Xalet

У меня выглядит примерно так и всё работает:
Код:
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
 

swyatogor

Green Team
24.02.2014
593
24
BIT
0
@Xalet, я так понимаю что "oracle" - это настроенное подключение? вот как раз этого и хотелось избежать
 
Последнее редактирование модератором:

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
Еще вариант, без программного подключения к oracle

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

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