Lotus и db2 (ADO)

  • Автор темы jcolor
  • Дата начала
J

jcolor

Гость
#1
Привет всем!!!!

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

Делаю следующее:
Код:
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 ??
 
A

Azrael

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

jcolor

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

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

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

Azrael

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

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

jcolor

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

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

Azrael

Гость
#6
а dxl_current - это какого типа переменная- xmlprocessor, domparser или что?
вот Вам в пример код, правда для импорта из xml:
Код:
	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 можно использовать и для импорта и для экспорта
 
J

jcolor

Гость
#7
Dim dxl_current As NotesDXLExporter

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

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


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

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

Azrael

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

jcolor

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

Azrael

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

jcolor

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

Код:
	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 , как же их туда передавать?
 
A

Azrael

Гость
#12
При большом XML выдается ошибка :

SQL0102N Слишком длинная строчная константа (начинается с "'<?xml version="1.0" encoding="utf-8"?> <document xmlns="http://www.lo").
Видимо вот здесь (telepat mode=on):
Код:
 '-- необходимо заменять одинарные кавычки на двойные	
qry.SQL = |insert into TESTDB (doc_xml) |+_
|values('|+Replace(strm_xml.ReadText(),Chr(039),Chr(034))+|')|
Судя по тому, что функция принимает первым параметром sourceArray as Variant, то я бы попробовал переписать функцию для замены кавычек простым циклом.
 
J

jcolor

Гость
#13
<!--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Гб информации :)
 
A

Azrael

Гость
#14
хмм... ну тогда не знаю, если только пробовать не в Лотусе, а например, в delphi/c++/.net через ado-технологии (TADOTable) или через хранимые процедуры как-нибудь :)