Lotus

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

  1. Z9A

    Z9A Гость

    Для выгрузки из lotus в Access я использую ОДБС соединение, В шаблоне Access все поля проставила, где необходимо дата, числовое или текстовое, а также в некоторых полях поставила разрешения для ввода пустых строк....
    Дальше пишу агента объевляю необходимые переменные Dim....потом открываю словари....нахожу путь к своему шаблоне Access......далее Set con = New ODBCConnection
    Set qry = New ODBCQuery
    Set result = New ODBCResultSet, после чего чищу таблицу открываю ее, далее в Lotus выбираю необходимую форму и после этого загвозка:Query = "(Del != ""1"") & (Form = ""Klient"") " 'клиент
    Set DocCol = Db.Search( Query, DT, 0 )
    Set docCur = DocCol.GetFirstDocument
    Do While Not (docCur Is Nothing)

    'загвозка тут

    result.AddRow

    tmpStr = docCur.GetItemValue( "DictValue") (0) & (" ") 'если я убираю (" ") у меня выдает ошибку,говорит что поле пустое и заполнятся не будет, что делать?? Хоят в Access самом проставлено, что пустые поля можно проставлять....поля все тектовые и в Lotus и в Access
    Call result.SetValue(2, Left(tmpStr,80) ) 'Потом тут загвозка ограничение в Access можно 255 символов я убираю Left(tmpStr,80) и мне выдает опять ошибку, как тут быть??? поля все тектовые и в Lotus и в Access

    Также дальше не могу вывести в Access числовае поля и дата время...подскажите какие необходимы свойства или методы так как что то как стекстовым у меня не получается....вот пример

    tmpChis = docCur.GetItemValue( "NumIcon" ) (0) ---тут численное поле и в Lotus и в Access
    Call result.SetValue(5, (" ") )

    И как с датой

    result.UpdateRow
    Set docCur = DocCol.GetNextDocument(docCur )


    Loop

    Заранее спасибо....
     
  2. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
    здесь пробегало про ОДБЦ...
    советовали АДО... (АктивХу воспользовать)
    http://codeby.net/forum/threads/8952.html?hl=ADODB

    но вот др. вопрос - а зачем аксесс как таковой? Проблем в жизни мало ;)
    есть др. БД, SQLite например (он и на мобильных цустройствах есть - iPhone, например)
    акцесовское междумордие - тоже не фонтан...
     
  3. Z9A

    Z9A Гость


    Блин это я читала надо через ODBC, да блин я все подключилась, вот только не могу данные выгрузить поля то не сходятся то еще бред какой либо вылазиет....

    Сказали в акцесс тут не чего не поделаешь....Порсто я еще все методы и свойства плохо знаю вот и числовые поля и даты не могу выгрузить, только пока текстовые, помогите если сможите....
     
  4. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
    я тогда помочь не могу...
    ОДБЦ - очень по-разному себя ведет от источника
    я давно (уж с 1997 г) не работал через ОДБЦ и особ. с акцесом

    может кто-то ходил по этим граблям, расскажет

    но принципиального неприятия АДО (все-равно уже аксец) - не понимаю
     
  5. Z9A

    Z9A Гость

     
  6. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Z9A
    Не морочь себе голову! Пиши через ADO! Тут очень все доступно описано
    Ну а такие моменты как соответствие типов данных - не стоит полагаться на СУБД. Лучше все обработать руками.

    И включи приватные сообщения в форуме
     
  7. Z9A

    Z9A Гость

    Нет надо через ODBC.....просят только через ODBC, она все скидывает но выводит ошибки..и числовые не могу поля внести с датой...(((
     
  8. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну есть такие варианты:
    1. Ты путаешь столбцы. Попробуй ссылаться не по индексу столбца, а по имени
    2. Попробуй посмотреть какой тип данных ожидается в поле через FieldNativeDataType. Обрабатывай каждый тип отдельно через case.

    в этом выражении
    Код (Text):
    tmpChis = docCur.GetItemValue( "NumIcon" ) (0)
    tmpChis - какой тип данных?

    Через FieldSize можно обрезать строки под длинну поля

    Ну и желательно обрабатывать ошибки
    Код (Text):
    error% = odbcResultSet.GetError
     
  9. Z9A

    Z9A Гость

    Нет столбцы я точно не путаю хотя возможно....но если у столбца в Access русское название, что надо ссылаться на него...если да можешь строчку написать как это примерно..а то я пограмить только учусь...
    И еще вот про тип данных по подробней нельзя где смотреть???и как обрабатывать каждый тип отдельно через case, мне надо будет еще объявить эту переменную???
    FieldSize - и про эту функцию есть небольшой пример..как она обрезает строки....

    А обработчик ошибок у меня стоит....!!!

    заранее спасибо....

    А если я вам скину код можете посмотреть его???и коменты поставлю и вы свои что не так)))!!если вас это не утруднит...



    И tmpChis я поставила Integer так как в Access и в поле у меня числовые поля стоят...
     
  10. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Код в студию!

    про типы данных

    Код (Text):
    Dim typeConst As Integer

    Цикл по всем полям, которые надо экспортировать


    if cstr( docCur.GetItemValue( <Имя поля> )(0) ) <> "" then

    typeConst = result.FieldNativeDataType(i)

    Select Case typeConst
    Case SQL_CHAR : Call result.SetValue(i, cstr( docCur.GetItemValue( <Имя поля> )(0) ) )
    Case SQL_NUMERIC : Call result.SetValue(i, cint( docCur.GetItemValue( <Имя поля> )(0) ) )
    Case SQL_DECIMAL : Call result.SetValue(i, cdbl( docCur.GetItemValue( <Имя поля> )(0) ) )
    Case SQL_INTEGER : Call result.SetValue(i, cint( docCur.GetItemValue( <Имя поля> )(0) ) )
    Case SQL_DATE : Call result.SetValue(i, cdat( docCur.GetItemValue( <Имя поля> )(0) ) )
    End Select

    End If

    конец цыкла
    ну где-то так. Правда не совсем уверен относительно даты
    Lotus Domino Designer 8.5 Help - Examples: FieldNativeDataType method

    Подробней о типах данных почитай в хелпе по методу FieldNativeDataType.
    А название полей на русском - изврат
     
  11. Z9A

    Z9A Гость

     
  12. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    прошу прощения. Надеюсь это опечатка
    1.
    Код (Text):
    Call result.SetValue(5, "NumIcon" )
    "NumIcon" - это занчение? ;)
    Тогда зачем это?
    Код (Text):
    tmpChis = docCur.GetItemValue( "NumIcon" ) (0) 'тут у меня поле численное и не выводит опять ошибку...
    (((пожет не так прописала не хочет из лотуса в акцесс, да кстати поле еще скрытое...
    Тут надо написать Call result.SetValue(5, tmpChis )

    2.
    Код (Text):
    tmpdata = docCur.GetItemValue( "C_StartDate" )' ни как не грузит из шаблона лотуса в акцесс
    а где присвоение значения в Access?

    А тут Call result.SetValue( <номер столбца>, tmpdata )
     
  13. Z9A

    Z9A Гость


    "NumIcon" - это поле в LOTUSE просто я эксперементировала)))вот 2 раза и написала))) если я так напишу как он узнает из какого поля брать??? Call result.SetValue(5, tmpChis )



    Блин тупой из меня программер....(((
     
  14. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    короче
    вместо Call result.SetValue(5, "NumIcon" ) надо написать Call result.SetValue(5, tmpChis )
    после tmpdata = docCur.GetItemValue( "C_StartDate" ) надо дописать Call result.SetValue( <номер столбца>, tmpdata )

    как откуда он будет знать????
    Ты же загоняешь значение поля из Lotus в переменную tmpChis = docCur.GetItemValue( "NumIcon" ) (0)
    Значит потом надо уже работать с переменной.
    Читай хелп!!! у метода SetValue 2 параметра. первый - номер или имя столбца; второй - значение, которое надо передать
     
  15. Z9A

    Z9A Гость

    А тут еще и переменную i надо объявлять а какой у нее тип???


    Да понела свои ошибки не внимательность...после того как tmpChis = docCur.GetItemValue( "NumIcon" ) (0)
    Call result.SetValue(6, tmpChis ) - выдает ошибку: 13 Type mismatch in #114 мне кажется или поле там пустое или что т оеще...(((с полем в Access

    tmpdata = docCur.GetItemValue( "C_StartDate" ) (0)
    Call result.SetValue(5, tmpdata ) и тут просит Set может я не правельно объявила tmpdata я объявила как NitesDataTime
     
  16. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Если тебе надо передавать в Access только то что ты показала в коде - смотри 14-е сообщение

    если надо много полей - все что у тебя написано между result.AddRow и result.UpdateRow замени на
    Код (Text):
    Option Base 1

    Dim typeConst As Integer
    Dim i as integer
    Dim FieldName as Variant

    FieldName = "<Тут через; БЕЗ пробелов напиши перечень полей из Notes-формы которые надо экспортировать>"
    ' порядок полей должен сообветствовать порядку полей в Access.
    FieldName = fulltrim(split( FieldName, ";" ) )

    for i = 1 to Ubound( FieldName )

    if cstr( docCur.GetItemValue( FieldName(i) )(0) ) <> "" then

    typeConst = result.FieldNativeDataType(i)

    Select Case typeConst
    Case SQL_CHAR : Call result.SetValue(i, cstr( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_NUMERIC : Call result.SetValue(i, cint( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_DECIMAL : Call result.SetValue(i, cdbl( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_INTEGER : Call result.SetValue(i, cint( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_DATE : Call result.SetValue(i, cdat( docCur.GetItemValue( FieldName(i) )(0) ) )
    End Select

    End If

    Next
    выражение Option Base 1 говорит о том, что индексы элементов массива будут начинаться 1, а не с 0. Это касается ТОЛЬКО массивов и не касается столбцов

    При надобности в конструкцию Select Case нужно дописать недостоющие типы данных. Подробней о типах данных почитай в хелпе по методу FieldNativeDataType.

    правильно просит
     
  17. Z9A

    Z9A Гость

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


    А еще вопрос в Access ведь одно поле первое создается автоматом...он его считает ключевым как с ним быть???оно при вашем коде считать ся будет???


    все сделал внесла нужные поля запустила и выдал такую ошибку 544 LS:do - Invalid row number.in #146 и не сбрасывается, такое ощущение зациклило....как быть????мне кажется так как в первый столбец оно значение стало вводить а там ключевой он....)))!!!
     
  18. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да... с ключевым полем проблемка.
    Если таблицы в Access еще не сформированы, а в стадии разработки (не уверен что переименование существующего поля не приведет к потере данных) - то назови их так же как в Lotus. Это в будущем сильно упростит жизнь
    Тогда в моем предложении можно убрать Option Base 1 и цикл начать не с 1 а с 0, выражения Call result.SetValue(i, cstr( docCur.GetItemValue( FieldName(i) )(0) ) ) заменить на Call result.SetValue( FieldName(i), cstr( docCur.GetItemValue( FieldName(i) )(0) ) ), а выражение typeConst = result.FieldNativeDataType(i) заменить на typeConst = result.FieldNativeDataType( FieldName(i) )
     
  19. Z9A

    Z9A Гость


    Вот на этих строках он меня зацикливает выдает ошибку Case SQL_DECIMAL : Call result.SetValue(i, cdbl( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_INTEGER : Call result.SetValue(i, cint( docCur.GetItemValue( FieldName(i) )(0) ) )
    Case SQL_DATE : Call result.SetValue(i, cdat( docCur.GetItemValue( FieldName(i) )(0) ) )
    ОШИБКА
    544 LS:do - Invalid row number.in #146
    почему???
     
  20. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    На сколько я понимаю - это ошибка в строке кода с номером 146. что в этой строке?
     
Загрузка...

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