ODBCConnection

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

  1. olegber

    olegber Гость

    Здравствуйте.
    Проблема с LocateRow при использовании ODBCConnection.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Dim con As ODBCConnection
    Dim qry As New ODBCQuery
    Dim Result As New ODBCResultSet
    Set con = New ODBCConnection
    con.SilentMode = True      
    status = con.ConnectTo( "oracle 10g ","test","test" )  
    If Not status Then
    Print "Error:Conection Failed "&con.GetExtendedErrorMessage(con.GetError)
    Exit Sub
    Else
    Print "Conection OK"
    End If
    Set qry.Connection = con
    Query="Select id from tablica where id <>0 ''''-----(возращает около 70000 строк)
    result.CacheLimit=DB_ALL   
    qry.SQL=Query
    Set result.Query = qry
    If result.Execute Then
    If result.IsResultSetAvailable Then
    result.FirstRow
    If result.LocateRow(1,999) Then
    Print "
    Ok
    Else
    Print "
    Bad" ''''''''---не находит значение(всё время переходит на эту строку)
    Print result.GetExtendedErrorMessage( result.GetError) '''''''------ NOERROR       
    End If
    end if
    end if
    Если поменять запрос: Query="Select id from tablica where id = 999 , тогда работает корректно (Print "OK").
    Не могу разобраться почему так.(может быть дело в большом количество строк в SQl запросе, или упустил какую-нибудь настройку ODBC?)
    Спасибо за помощь.
     
  2. Sandr

    Sandr Гость

    вообще то в result.LocateRow(1,999) второй параметр должен быть строкой... Может в этом дело?


    Для того, что бы понять о каком-то лимите строк посмотрите на результат Result.NumRows
     
  3. olegber

    olegber Гость

    <!--QuoteBegin-Sandr+12:12:2007, 13:45 -->
    <span class="vbquote">(Sandr @ 12:12:2007, 13:45 )</span><!--QuoteEBegin-->вообще то в result.LocateRow(1,999) второй параметр должен быть строкой... Может в этом дело?
    [snapback]89566" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    -дело точно не в этом,ведь при смене SQL запроса-всё выполняется корректно
    (хотя в хэлпе сказано должна быть строка).
    <!--QuoteBegin-Sandr+12:12:2007, 13:45 -->
    <span class="vbquote">(Sandr @ 12:12:2007, 13:45 )</span><!--QuoteEBegin-->Для того, что бы понять о каком-то лимите строк посмотрите на результат Result.NumRows
    [snapback]89566" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    -Что мне это даст?

    lotus 5.0
     
  4. oxy

    oxy Гость

    Dim con As New ODBCConnection
    Dim qry As New ODBCQuery
    Dim result As New ODBCResultSet
    Set qry.Connection = con
    Set result.Query = qry
    con.ConnectTo("lotus")

    надо вытащить данные из оракла в лотус,
    мне подключили драйвер Oracle inOraCLient10g_home1

    вопрос: для работы кода выше, нужен принципиально Microsoft ODBC for Oracle или должно работать и с тем, кот. подключили???
     
  5. oxystile

    oxystile Гость

    <_< получилось!

    вот еще такой вопрос
    variable1 = result.GetValue( "BPARTNERID",variable1) - это значение получаю
    variable2=result.GetValue( "PARENTBPARTNERNAME",variable2) а здесь ошибка 621
    разработчики говорят, что колонки по структуре одинаковы

    но как по мне, ламеру в этом вопросе, они отличаются (хотябы внешне на экране)
    вкладываю рисунок, может, кто-нибудь сталкивался с такой же задачей
     

    Вложения:

    • 11.bmp
      Размер файла:
      505,7 КБ
      Просмотров:
      16
  6. Sandr

    Sandr Гость

    oxystile

    Ошибка 621 - значит, что не сожет сконвертировать данные.
    Попробуйте variable2 вариантом сделать...
     
  7. oxystile

    oxystile Гость

    вэриантом и был...

    у меня не берутся оракловские VARCHAR2
     
  8. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    А на кой вам вообще ODBC для Oracle-то? Юзайте LSX...
     
  9. oxystile

    oxystile Гость

    да, в принципе все равно, что юзать, главное данные вытащить
    а с LSX ранее не сталкивалась
    как тогда с LSX выполнить strSQL = "select * from bpartners_vw t" и получить поле?
    дайте,плиз, наводку

    Ответ с кодом под LSX уехал в сюда.
     
  10. allex

    allex Гость

    На SuSE стоит Domino 7.0.2, установлен unixODBC, настроен конект через ODBC на MYSQL 5.0.67.
    Тесты на конект с использованием утилиты сервера Domino dctest, проходит успешно.

    А вот скриптом агента не проходит

    <!--shcode--><pre><code class='ls'>Uselsx "*LSXODBC"

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase

    Set con = New ODBCConnection
    Set qry = New ODBCQuery
    Set result = New ODBCResultSet
    Set qry.Connection = con
    Set result.Query = qry

    DataSource$ = "name ODBC conect"
    UserName$ = "uname"
    Password$ = "upass"

    status=con.ConnectTo(DataSource$, UserName$, Password$)
    Print "Status: "& Cstr(status)[/CODE]
    ошибка подключения к БД
    status = false

    Подскажите что не так?
     
  11. Alexander (Criz)

    Alexander (Criz) Гость

    А что пишет con.GetError и con.GetExtendedErrorMessage ?
     
  12. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Лень копаться. С MS-ODBC какие-то глюки имел. И разработчики видимо тоже, т.к. на этот набор классов похоже махнули рукой.
    Рекомендую юзать LSX. Там нативные коннекторы унифицированы, в т.ч. и ODBC.
     
  13. allex

    allex Гость

    С ODBC я подозреваю что он ищет локальный документ подключения, а мне нужен тот что настроен на сервере.

    Если я правильно понимаю, но нужно ставить DECS и в ней прописывать документ подключения, например (oracle).
    И его уже прописывать в качестве имени соединения.
    Код для пояснения мыслей
    Код (Text):
    [Options]
    Option Public
    Option Explicit
    Uselsx "*lsxlc"

    [Initialize]
    Sub Initialize
    Dim sess As New LCSession
    Dim conn As New LCConnection ("oracle")

    'set the connection parameters...
    conn.Server = "servername"
    conn.UserId = "userid"
    conn.Password = "password"
     

    Вложения:

    • err_OBDC.jpg
      err_OBDC.jpg
      Размер файла:
      29,9 КБ
      Просмотров:
      75
  14. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Неправильно. Для использования LSX ничего, кроме клиента соотв. СУБД, ставить не нужно.
    Для ODBC-шных классов надо И клиента, И odbc (его ещё и настроить нетривиально)
     
  15. IsAvailable

    IsAvailable Гость

    Что-то столкнулся с непонятной мне проблемой - может сможет кто подсказать...
    Или хотя бы в какую сторону покопать...

    Есть файл dbf (dBase III) - test.dbf
    Есть источник данных в системном DSN - "test" (Microsoft dBase Driver)
    Пишу скрипт, который цепляет эту базу через XLS
    База цепляется, читается, но записать туда не могу ничего =\
    Уж и UpdateRow пишу, уж и commit'ы где только не ставил...
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='vb'>Dim con As ODBCConnection
    Dim qry As ODBCQuery
    Dim result As ODBCResultSet

    datasource$ = "test"

    Set con = New ODBCConnection
    retcode = con.ConnectTo(datasource$)
    If retcode Then
    Print "ODBC connection to " & datasource$ & " opened."
    Else
    Exit Sub
    End If

    Set qry = New ODBCQuery
    Set qry.Connection = con
    qry.SQL = "SELECT * FROM test"

    Set result = New ODBCResultSet
    Set result.Query = qry
    Call result.Execute

    If result.GetError <> DBstsSUCCESS Then
    Print "Ошибка при выполнении запроса"
    Exit Sub
    Else
    con.AutoCommit = True
    Call result.LastRow
    Call result.FirstRow
    Call result.SetValue(4, "Name")
    Call result.UpdateRow
    Call con.CommitTransactions
    End If
    con.Disconnect[/CODE]
     
  16. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Были похожие проблемы - не всега срабатывали методы result.SetValue
    Поэтому практически всегда пользовался выполнением нужного мне SQL запроса
    Вот рабочий код, 6 параметров - добавляет строку в таблицу с ними, чистить не стал может быть много "воды", надеюсь поможет:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    Option Public
    Uselsx "*LSXODBC"

    Sub Initialize
    '******************************************'select document which need to insert in MS SQL DB
    Dim doc As NotesDocument
    Dim coll As NotesDocumentCollection
    Dim session As New NotesSession
    Dim db As NotesDatabase

    Dim peopledb As NotesDatabase
    Dim persondoc As NotesDocument
    Dim bynameView As NotesView

    Set db = session.CurrentDatabase
    Set peopledb = session.GetDatabase ( db.Server, "people.nsf" )
    Set bynameView = peopledb.GetView( "(ByName)" )

    Set session = New NotesSession
    Set db = session.CurrentDatabase


    Set doc = session.DocumentContext


    If doc.Type(0) = "Incident" Then
    Exit Sub
    End If

    '****************************************END SELECTED

    '****************************************ODBC Classes Initialize
    Dim con As New ODBCConnection
    Dim qry As New ODBCQuery
    Dim result As New ODBCResultSet
    Dim msg As String

    con.ConnectTo("a")
    Dim s2,s1,s,status,namee,namee1,fields As Variant

    Set qry.Connection = con

    Set persondoc = bynameView.GetDocumentByKey (doc.AssignedTo(0))

    'get all fields from IT request
    a = doc.Subject(0)
    a1 = doc.VC(0)

    a2 = persondoc.CEDSid(0)
    aa3 = doc.CreatedWhen(0)   
    a3 = Left(aa3,10)
    a3 = Replace( a3 ,".","/")
    aa = Right(a3,5)     '/2008
    aaa = Strleft(a3,aa) '26/12

    a3 = Right(aaa,2) + "/" +Left(aaa,2) + aa

    a4 = doc.Number(0)


    qry.SQL = "INSERT INTO Lotus_Notes_Requests (request_id,request_subj,request_val_chain,request_status,request_responsible
    ,request_start_date)"
    qry.SQL = qry.SQL & " VALUES ( ?param7?, ?param2?, ?param3?, ?param5?,?param4?,?param6?)"  

    Set result.Query = qry

    asa = {'}+a+{'} 'request_subj                                        'doc.Subject  
    asa1 = {'}+a1+{'} 'request_val_chain                            'new field in IT request
    asa2 = {'}+"europe\"+a2+{'} 'request_responsible     'cedsid - doc.AssignedTo  
    asa3 = {'}+"0"+{'} 'request_status                                      '1- Draft, Archived or 0 - Others
    asa5 = {'}+a3+{'} 'request_start_date                                'doc.CreatedWhen
    asa6 = {'}+a4+{'} 'request_id                                         'doc.Number

    Call result.SetParameter(1, asa6)
    Call result.SetParameter(2, asa)
    Call result.SetParameter(3, asa1)
    Call result.SetParameter(4, asa3)
    Call result.SetParameter(5, asa2)
    Call result.SetParameter(6, asa5)

    Call result.Execute()

    result.Close(DB_CLOSE)
    con.Disconnect

    Exit Sub

    errorHandler:
    Print "Error at line" & Erl() & Str(Err) & ": " & Error$   

    Exit Sub

    End Sub
     
  17. IsAvailable

    IsAvailable Гость

    Gor
    В самом деле! Ну надо же... Спасибо! :)
    Сделал через UPDATE и закомитил - обновления сохранились!
     
  18. allex

    allex Гость

    Посмотри вот это
     
  19. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Не работает
    Call con.ConnectTo ("Provider=MSDASQL;DSN=front-4;SRVR=Сервер;DB=База;UID=Пользователь; PWD=Пароль")
    Если установить клиент front у себя, то все работает

    знакомый аналогичное подключение делает с помощью php , *подключая библиотеку* и у него работает без клиента.

    1. Как можно драйвера клиента front запихать в лотусовую бд, что бы не ставить клиент front?
    1. Можно ли php библиотеку теоретически под Lotus переделать?
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    вероятно у него драйвер установлен
     
Загрузка...
Похожие Темы - ODBCConnection
  1. Реник
    Ответов:
    19
    Просмотров:
    5.743

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