• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

LCConnection

R

rrr

Пытаюсь вызвать хранимую процедуру из Оракла. О процедуре известно немного - название и тип входящего параметра (number). Пробую вызывать двумя способами:

Так:
Код:
'	Dim ins As New LCFieldList
'	Dim outs As New LCFieldList
'	Dim num As New LCField(1, LCTYPE_INT)
'	Set num = ins.Append("num", LCTYPE_INT)
'	num.Value = 123
'	Call conn.Call(ins, 1, outs)

И вот так:
Код:
	Dim in_params As New LCFieldList
Dim out_params As New LCFieldList
Dim in_param As LCField
Dim out_param As LCField
Dim val_param As LCField
Set in_param = in_params.Append("num", LCTYPE_NUMERIC)
Set out_param = in_params.Append("str", LCTYPE_NUMERIC)
in_param.value= 123
Call conn.Call(in_params, 1, out_params)


Выдает wrong number or types of arguments in call 'MY_PROC'

Не подскажет ли кто, в каком направлении копать?
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
хм... а заголовок процедуры увидеть можно?
Кажись неверный тип передаешь.
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
LCTYPE_NUMERIC это, как я понимаю, Double
Если значения целочисленные, может лучше использовать LCTYPE_INT ?
 
A

afest

в LS всегда была проблема несовместимости типов данных и их конвертации (((
 
R

rrr

Всем спасибо, разобрался. Делюсь, может, еще кому пригодится.
Пришлось загружать не номер поля, а имя:

Set num = ins.Append("my_no_", LCTYPE_NUMERIC)
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
эээ, в хелпе же написано: Set field = fieldlist.Append(fieldName, dataType)
fieldName - String. The name for the field.
У меня даже в мыслях не было, что в этом проблема)
 
P

phantom76

Подскажите, как правильно преобразовать данные NotesDateTime в формат для Oracla при формировании записи?

Полезный redbook с примерами.
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
хм... судя по хелпу надо, если поля нет:
Добавить в LCFieldList добавить через Append(<fieldName >, LCTYPE_DATETIME)
Это вернет LCField...
Далее LCField.SetDateTime (index, srcDateTime), где srcDateTime это объект LCDatetime.
LCDatetime создается через New LCDatetime(Year, Month, Day, Hour, Minute, Second, Hundredth, Zone, DST)
Вот как-то так...
 
P

phantom76

спасибо ), я тоже вчера пришел к такому же мнению. NotesDateTime разбирать на год,месяц,день... и создавать LCDatetime.

вот накидал функцию для конвертации из NotesDateTime в LCDateTime

Код:
Function NotesDtToLcDatetime ( dt As NotesDateTime) As Lcdatetime
On Error GoTo Handler
Dim lcdt As Lcdatetime
Dim yy As Long
Dim mm As Long 'месяц
Dim dd As Long
Dim hh As Long
Dim mn As Long 'минуты
Dim ss As Long

yy = CLng(Year(dt.Dateonly))
mm = CLng(Month(dt.Dateonly))
dd = CLng(Day(dt.Dateonly))
If dt.Timeonly <>"" Then
hh = CLng(Hour(dt.Timeonly))
mn = CLng(Minute(dt.Timeonly))
ss = CLng(Second(dt.Timeonly))
Else
hh = 0
mn = 0
ss = 0
End If

Set lcdt = New LCDatetime(yy,mm,dd,hh,mn,ss,0,)

Set NotesDtToLcDatetime = lcdt

Exit Function
Handler:
Print "Ошибка : " & Error & +Str(Err)+" в строке " & CStr(Erl())
Exit Function
End Function
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
202
LCConnection'у всё равно куда писать, в db2, Oracle и т.д., т.к. это всё базы данных.
Для знающих Java конечно же лучше уже разобраться с . Но преимущество LCConnection в том, что не нужно мудохаться подбирая драйвера под "свою" реляционку. Указываете тип РБД при открытии соединения, а он автоматом использует нужный драйвер, работающий именно с этой РДБ.
Не забудьте, что предварительно необходимо установить софт клиента соответствующей СУБД или ODBC и соответствующим образом настроить это. Это терпимо для сервера, но если вам нужна связь с СУБД на клиентском месте, а ваш парк клиентов составляет несколько тысяч установок, то вы просто замудохаетесь делать эти установки/настройки на каждом клиентском месте. Поэтому JDBC гораздо практичнее во всех отношениях.
 
Мы в соцсетях:

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