Lotus и db2 (ADO)

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

  1. jcolor

    jcolor Гость

    Привет всем!!!!

    Подскажите, кто работал с DB2 в лотусе
    Задача состоит в следующем:
    Написать лотусовский агент, в котором необходимо производить экспорт выбранных документов в XML, и после этого полученный XML загружать в базу DB2
    (DB2 - v.9, Lotus - 6.5)

    Делаю следующее:
    Код (Text):
    file_path="c:\xml\"
    count=1

    '-- выбор выделенных документов   
    Set doc_collection=db_current.UnprocessedDocuments
    Set doc = doc_collection.GetFirstDocument()
    While Not(doc Is Nothing)

    file_xml=file_path+Cstr(count)+".xml"
    If Not strm_xml.Open(file_xml) Then
    Print "ОШИБКА!!! невозможно создать файл "+file_xml
    Goto error_exit
    End If

    Call dxl_current.SetInput(doc)
    Call dxl_current.SetOutput(strm_xml)
    Call dxl_current.Process


    '-- необходимо заменять одинарные кавычки на двойные
    qry.SQL = |insert into TESTDB (doc_xml) |+_
    |values('|+Replace(strm_xml.ReadText(),Chr(039),Chr(034))+|')|


    If Not result.Execute Then
    Print "ОШИБКА!!! заполнения базы DB2"
    Goto error_exit
    End If


    Call strm_xml.Close
    Set doc = doc_collection.GetNextDocument(doc)
    count=count+1
    Wend
    Вылетает с ошибками :D((

    Какие есть способы загрузки XML ??
     
  2. Azrael

    Azrael Гость

    encoding="utf-8" ? Оно с кодировкой windows не работает. Открой сам xml-файл в IE, посмотри, не выдает ли ошибки в самом xml-е. было дело, пытался мучить xml, правда давно было, честно говоря, проще сделать из db2 в текстовый файл, затем из него в Лотус (после долгих мучений пришел именно к такой концепции).
     
  3. jcolor

    jcolor Гость

    Для: Azrael
    - А как можно поменять кодировку, или задать кодировку для NotesDXLExporter ??

    Самое интересное, что в DB2 этот запрос работает(я просто вставляю в инсерт содержимое сформированного файла)

    - Расскажите как вы из Db2 генерите файлы???
     
  4. Azrael

    Azrael Гость

    Честно говоря, немного невнимательно прочитал изначальный вопрос: у меня обратная задача была - скормить лотусу xml-файл (как раз из db2 сформированный) и создать документы Lotus.
    Мне их уже готовые присылали :D Скорее всего подсоединялись через ADO как к обычной РСУБД.

    А вообще в Lotus есть DECS - специальное средство для работы с реляционными базами. Здесь на форуме точно были темы по подключению к РСУБД напрямую из Lotus.
    В 7-ке, кроме того, есть доп. возможности интеграции с DB2.
     
  5. jcolor

    jcolor Гость

    Я прописала ODBC соединение к DB2
    через него соединяюсь с базой - все ок
    обычные данные спокойно передаются, и выполняются запросы,

    а вот сформированный XML ни в какую :D((
     
  6. Azrael

    Azrael Гость

    а dxl_current - это какого типа переменная- xmlprocessor, domparser или что?
    вот Вам в пример код, правда для импорта из xml:
    Код (Text):
        Set inputStream = session.CreateStream
    inputStream.Open (stFileName)

    If inputStream.Bytes = 0 Then
    Msgbox stFileName & " - пустой!", 48
    Goto ErrLabel
    End If

    Dim domParser As NotesDOMParser
    Set domParser=session.CreateDOMParser(inputStream)

    Call domParser.Process
    здесь работает, вдруг поможет, domParser можно использовать и для импорта и для экспорта
     
  7. jcolor

    jcolor Гость

    Dim dxl_current As NotesDXLExporter

    А вы когда в лотус ХМЛ файлы импортировали данные в поле документа сохраняли или как документ?

    Просто интересно как работает следующее:
    из Лотуса документы экспортить в ХМЛ сохранять это в ДБ2,
    а потом из ДБ2 на основе ХМЛ восстанавливать документы в Лотусе
    :D)


    сейчас пока заметила ошибку, на которой заваливается экспорт:
    лотус когда генерит ХМЛ дописывает строку
    <!DOCTYPE document SYSTEM 'xmlschemas/domino_6_5_3.dtd'>

    на ней пока все валится:(
    сейчас попробую от нее избавиться:))
     
  8. Azrael

    Azrael Гость

    В базе справочником - какие теги в xml каким полям в документе соответствуют + общая структура xml-документа.
    т.е. находит тег, например <doc type="Invoice"> - ищет справочник счет-фактуры, в нем прописано, что, например, тэгу <kontragent>ООО "Рога и копыта"</kontragent> соответствует поле документа "org2" - поскольку система на db2 - "не наша", а под них свою систему переписывать, чтобы совпадали, теги и названия полей - слишком накладно.
     
  9. jcolor

    jcolor Гость

    Для: Azrael
    ясненько, СПАСИБО!
    Буду бороться дальше :D))
     
  10. Azrael

    Azrael Гость

    Пожалуйста! Попробуйте все-так DOMParser. С DXL, помнится, проблемы были... или вообще в текстовый документ сохранять. Я когда снова import-export делал, на этот раз из 1C, использовал текствовые документы (помня все мучения с XML :D ) - в 1с внешний отчет, в лотусе - просто через NotesStream :)
     
  11. jcolor

    jcolor Гость

    Экспорт удался! :)
    просто необходимо было указывать следующие параметры при загрузке

    Код (Text):
        Dim dxl_current As NotesDXLExporter
    Set dxl_current=session.CreateDXLExporter

    dxl_current.OutputDOCTYPE = False
    dxl_current.ConvertNotesBitmapsToGIF = True
    А дальше с помощью INSERT добавляется в DB2 базу:)


    Но во при дальнейшем использовании столкнулась со следующим:
    При большом XML выдается ошибка :

    SQL0102N Слишком длинная строчная константа (начинается с "'<?xml version="1.0" encoding="utf-8"?> <document xmlns="http://www.lo").


    ПОлучается есть ограничения на строку SQL выражения?
    По документации XML поля могут хранить до 2 GB , как же их туда передавать?
     
  12. Azrael

    Azrael Гость

    Видимо вот здесь (telepat mode=on):
    Код (Text):
     '-- необходимо заменять одинарные кавычки на двойные   
    qry.SQL = |insert into TESTDB (doc_xml) |+_
    |values('|+Replace(strm_xml.ReadText(),Chr(039),Chr(034))+|')|
    Судя по тому, что функция принимает первым параметром sourceArray as Variant, то я бы попробовал переписать функцию для замены кавычек простым циклом.
     
  13. jcolor

    jcolor Гость

    <!--QuoteBegin-Azrael+12:07:2007, 20:45 -->
    <span class="vbquote">(Azrael @ 12:07:2007, 20:45 )</span><!--QuoteEBegin-->Судя по тому, что функция принимает первым параметром sourceArray as Variant, то я бы попробовал переписать функцию для замены кавычек простым циклом.
    [snapback]72163" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    не помагает:)

    переписала, оказалось, что дело в самом SQL выражении

    этот же запрос в редакторе команд ДБ2 тоже не проходит,
    слишком большая строка получается.

    Странно, как же тогда можно в ХМЛ поле занести 2Гб информации :)
     
  14. Azrael

    Azrael Гость

    хмм... ну тогда не знаю, если только пробовать не в Лотусе, а например, в delphi/c++/.net через ado-технологии (TADOTable) или через хранимые процедуры как-нибудь :)
     
Загрузка...
Похожие Темы - Lotus db2 (ADO)
  1. JohnLemon
    Ответов:
    0
    Просмотров:
    807
  2. Gandliar
    Ответов:
    8
    Просмотров:
    3.957
  3. lensu1
    Ответов:
    11
    Просмотров:
    4.742
  4. Kudesnik
    Ответов:
    3
    Просмотров:
    217
  5. Constantin A Chervonenko
    Ответов:
    0
    Просмотров:
    145

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