Lotus и Oracle (LCConnection)

  • Автор темы sanch
  • Дата начала
K

Kee_Keekkenen

спасибо :), с дибитой, думаю аналогично..
 
S

Sandr

да, в принципе все равно, что юзать, главное данные вытащить
а с LSX ранее не сталкивалась
<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='ls'>Option Public
Uselsx "*lsxlc"

Sub Initialize
Dim src As New LCConnection ("oracle")
Dim fldLst As New LCFieldList
Dim fld As LCField
Dim count As Integer

' set the appropriate properties to connect
src.Database = "Gold"
src.Userid = "JDoe"
src.Password = "xyzzy"

src.Connect

' now connected, we can execute a selection statement
If (src. Execute ("SELECT * from customer", fldLst) = 0) Then
Print "No records were fetched."
End
End If
Set fld = fldLst.Lookup ("CONTACTNAME")
Print "the 'contact names' stored in the table are:"

' fetch each record from the result set
While (src.Fetch (fldLst) > 0)
count = count + 1
Print " record #" & Cstr(count) & " = '" & fld.text(0) & "'"
Wend
If (count = 0) Then Print "No records were fetched."
End Sub
Example Output[/CODE]
На выходе будет:
record #1 = 'Peter Soames
record #2 = 'Trent Kent'
record #3 = 'Joan Lawrens'
 
O

oxystile

Sandr
Класс!! Спасибо! Работает!

(по сравнению с кодом для ODBCConnection изменила только строку src.Database на src.Server, ну, это если кому еще примерчик понадобится)
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
Всем привет.

поставили задачу закинуть данние из лотуса в таблицу Oracle, но только с помощю скрипта....
может ктото уже делал такое?
как стянуть из таблици Oracle инфу знаю, уже пробовал...но вот как запихнуть......проблем....
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
винда и неустойчиво (т.е. - тока для клиента) - ставим ОДБЦ дирвер, юзаем его в скрипте (хэлп дизигнера - ODBCConnection class)

либо java и jdbc

ф-ции INSERT, UPDATE из SQL языка...

еще сморим в хэлпе Update Method for LCConnection
и там же LCConnection Class Methods Summary
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
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">
Код:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim connection As New LCConnection("oracle")
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim LCRecord As New LCFieldList
Dim fCustomerid As LCField, fCustomername As LCField, fCustomercode As LCField, fCustomertype As LCField

Set db = ses.CurrentDatabase
Set dc = db.Search({Form = "Customer"}, Nothing, 0)

If dc.Count > 0 Then

connection.Server = "ORACLE"
connection.Userid = "User"
connection.Password = "qwerty"
connection.Metadata = "zoo.ln_legalcompanies"
On Error Goto Trap

connection.Connect

Msgbox "Successfully connected to B2Oracle."


Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)

Set LCRecord = New LCFieldList			
Set fCustomerid = LCRecord.Append(doc.GetItemValue("customerid")(0), LCTYPE_TEXT)
Set fCustomername= LCRecord.Append(doc.GetItemValue("customername")(0), LCTYPE_TEXT)
Set fCustomercode = LCRecord.Append(doc.GetItemValue("customercode")(0), LCTYPE_TEXT)
Set fCustomertype = LCRecord.Append(doc.GetItemValue("customertype")(0), LCTYPE_TEXT)

Call Connection.Insert(LCRecord)

Set doc = dc.GetNextDocument(doc)
Wend
Trap:
Msgbox "Connection failed with error " & Err & ": " & Error
Exit Sub
End If
на строчке Call Connection.Insert(LCRecord) видает ошибку....

Uploaded with
может я еще чтото не дописал... ????
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472

колонка нул, кот. не должна быть нул
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
lmike

сенкс, разобрался.....

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
ну ненаю - яж не знаю чего и как вставляется, тразакции автокомитятся или нет... и т.п.
вывод простой - коннект к базе есть, ф-ция работает, а дальше надо в детали вникать
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
разобрался с даними все вносится и все очень прекрасно, ))))))))))
но вот по ходу дела возник еще один вопрос:

как в рамках одного конекта записать дание в еще одну таблицу????
Данние из главного документа попадают в одну таблицу а данние из "главних" респонзов в другую....
вот здесь я не понимаю как должен ето сделать ведь connection.Metadata - только один раз упоминается.....



ааа нашел, .........
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
а кто-то мешает (хотя ограничений я не знаю) создать ещё один объект LCConnection("oracle") ?
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
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">
Код:
connection.Metadata = "zoo.ln_legaldocuments"		
On Error Goto Trap

connection.Connect

Msgbox "Successfully connected to B2Oracle."


Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)

Set dcres = doc.Responses
If dcres.Count>0 Then
Set docres = dcres.GetFirstDocument
Set LCRecordres = New LCFieldList

Set fIDres = LCRecordres.Append("ID", LCTYPE_TEXT)
Set fDocno = LCRecordres.Append("DOCNO", LCTYPE_NUMERIC)
Set fDocname = LCRecordres.Append("DOCNAME", LCTYPE_TEXT)
Set fDocstatus = LCRecordres.Append("DOCSTATUS", LCTYPE_TEXT)
Set fDocver = LCRecordres.Append("DOCVER", LCTYPE_NUMERIC)
Set fParentref = LCRecordres.Append("PARENTREF", LCTYPE_TEXT)				
Set fBocomment = LCRecordres.Append("BOCOMMENT", LCTYPE_TEXT)
Set fModified = LCRecordres.Append("MODIFIED", LCTYPE_DATETIME)
Set fNotesunidres = LCRecordres.Append("NOTESUNID", LCTYPE_TEXT)			

While Not docres Is Nothing 
If docres.form(0) = "document" Then

fIDres.Value = r						
fDocno.Value = Implode(Split(docres.GetItemValue("DocNo")(0),"."),",")						
fDocname.Value = docres.GetItemValue("DocName")(0)						
fDocstatus.Value = docres.GetItemValue("DocStatus")(0)
fDocver.Value = docres.GetItemValue("DocVer")(0)
fParentref.Value = docres.GetItemValue("ParentRef")(0)						
fBocomment.Value = docres.GetItemValue("BOComment")(0)
fModified.Value = docres.GetItemValue("DocModified")(0)				
LCRecordres.Notesunid = docres.UniversalID				

Call connection.Insert(LCRecordres)

r = r+1
End If
Set docres = dcres.GetNextDocument(docres)
Wend
End If		

Set doc = dc.GetNextDocument(doc)
n = n+1
Wend

Trap:
Print "Connection failed with error " & Err & ": " & Error
Msgbox "Connection failed with error " & Err & ": " & Error & Chr(13) & Chr(10) & connection.Metadata
Exit Sub
End If
итак, в етом варианте кода есть fDocno.Value и когда пробовать записать данние в таблицу видает ошибку:


если fDocno.Value убрать все данние в -таблицу попадут......
в чем можут бить проблем? почему без fDocno.Value все работает отлично а если есть то видает ошибку? может кто знает как с етим боротся?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
а вы воще читаете сообщение об ошибках или, по-вашему, это делают тока лохи? :)
там чёрным по англицки - не совпадение типов...
объявлен числовой, а впердовается стринг -о чем и ругаецо, дословно, в месюге
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
lmike

я читаю, и не надо здесь о лохах.....
я ведь написал, что ошибка о несовпадении типов вискакивает только тогда пробую записать fDocno.Value
если не записивать fDocno.Value ошибки НЕБУДЕТ.
и я не понимаю каким боком fDocno.Value влияет на тип записи fDocname.Value
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
Cleric-Lviv а в чем тоды вопрос-то...?
вставляете рекорд (читай строку), в части (читай поле) кот. ошибка...
"классические" РСУБД построены (очень упрощённо) по строчному принципу, не валидно поле - невалидна запись
супрайз-супрайз ;)
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
всем привет:KillMe: и с наступающим!

возвращаюсь к своим граблям, с прошлим проблемом разобрался....
ошибка била в том что данние надобно записивать в строгом порядке...
правильно
Код:
Set fCustomerid = LCRecord.Append("customerid", LCTYPE_INT)
Set fCustomername= LCRecord.Append("customername", LCTYPE_TEXT)

fCustomerid.Value = doc.GetItemValue("customerid")(0)
fCustomername.Value = doc.GetItemValue("customername")(0)
я же пробовал
Код:
Set fCustomerid = LCRecord.Append("customerid", LCTYPE_INT)
Set fCustomername= LCRecord.Append("customername", LCTYPE_TEXT)

fCustomername.Value = doc.GetItemValue("customername")(0)
fCustomerid.Value = doc.GetItemValue("customerid")(0)

вот теперь пробую витащить данние из таблици которие мне нужни.
делаю вроде как хелп пишет...
<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">
Код:
Dim connection As New LCConnection("oracle")
connection.Server = "B2ORACLE.WORLD"
connection.Userid = "READ"
connection.Password = "111"
connection.Metadata = "UA_PERSONS"

On Error Goto Trap

connection.Connect

Dim keys As New LCFieldList
Dim field As LCField
Dim fields As New LCFieldList
Dim empno As LCField
Dim lastname As LCField
Dim hiredate As LCField

Set field = keys.Append ("CLOCKNO", LCTYPE_TEXT)
'			field.Flags = LCFIELDF_KEY
field.Flags = LCFIELDF_KEY_NE
field.Text = pDoc.GetItemValue("TabelNo")(0)

If (connection.Select (keys, 1, fields) = 0) Then
'			If (connection.Select (Nothing, 1, fields) = 0) Then
Print "нема даних"
Msgbox "нема даних"
End
End If

Set lastname=fields.lookup("LASTNAME")
Set empno=fields.lookup("OTP_BEG")
Set hiredate=fields.lookup("OTP_END")
msg1=""
While (connection.fetch(fields)>0)
msg1=msg1 & "LASTNAME= " & lastname.text(0) & " EMPNO= " & empno.text(0) _ 
& " HIREDATE= " & hiredate.text(0) & Chr(10)
Wend
Messagebox msg1
но fields пустой..... в чем может бить проблем.....????

но вот если дальше ити и смотреть на
Код:
While (connection.fetch(fields)>0)
msg1=msg1 & "LASTNAME= " & lastname.text(0) & " EMPNO= " & empno.text(0) _ 
& " HIREDATE= " & hiredate.text(0) & Chr(10)
Wend
видаст все записи из таблици....
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
возвращаюсь к своим граблям, с прошлим проблемом разобрался....
ошибка била в том что данние надобно записивать в строгом порядке...
Да, но строгий порядок необязателен - я об этом дал ссылку выше.

но fields пустой..... в чем может бить проблем.....????
но вот если дальше ити и смотреть на
While (connection.fetch(fields)>0)
видаст все записи из таблици....
См. там же.

Если нужна только первая строка или используется вызов хранимой процедуры, всегда возвращающей одну строку, то можно делать так:
Код:
If connection.Fetch(fields) > 0 Then
'Код работы с "рекордом"
End If
 

Cleric-Lviv

Well-known member
03.01.2008
603
0
BIT
6
VladSh

ну смотрите, идут колонки их тип.

1- текст, 2 - текст, 3 - дата, 4 - номер

и ви пробуете записать

1- тест
2 - текст
3 - текст
4 - номер

на 3 строке будет ругатся..... у мну так было :)


на счет Fetch, я так понимаю, что етим методом нельзя сразу взять строку которою искал..... можно только первую, или методом перебора искать нужную строку.
 
Мы в соцсетях:

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