LCConnection

  • Автор темы Автор темы VladSh
  • Дата начала Дата начала
Пытаюсь вызвать хранимую процедуру из Оракла. О процедуре известно немного - название и тип входящего параметра (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'

Не подскажет ли кто, в каком направлении копать?
 
хм... а заголовок процедуры увидеть можно?
Кажись неверный тип передаешь.
 
LCTYPE_NUMERIC это, как я понимаю, Double
Если значения целочисленные, может лучше использовать LCTYPE_INT ?
 
в LS всегда была проблема несовместимости типов данных и их конвертации (((
 
Всем спасибо, разобрался. Делюсь, может, еще кому пригодится.
Пришлось загружать не номер поля, а имя:

Set num = ins.Append("my_no_", LCTYPE_NUMERIC)
 
эээ, в хелпе же написано: Set field = fieldlist.Append(fieldName, dataType)
fieldName - String. The name for the field.
У меня даже в мыслях не было, что в этом проблема)
 
Подскажите, как правильно преобразовать данные NotesDateTime в формат для Oracla при формировании записи?

Полезный redbook с примерами.
 
хм... судя по хелпу надо, если поля нет:
Добавить в LCFieldList добавить через Append(<fieldName >, LCTYPE_DATETIME)
Это вернет LCField...
Далее LCField.SetDateTime (index, srcDateTime), где srcDateTime это объект LCDatetime.
LCDatetime создается через New LCDatetime(Year, Month, Day, Hour, Minute, Second, Hundredth, Zone, DST)
Вот как-то так...
 
спасибо ), я тоже вчера пришел к такому же мнению. 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
 
LCConnection'у всё равно куда писать, в db2, Oracle и т.д., т.к. это всё базы данных.
Для знающих Java конечно же лучше уже разобраться с . Но преимущество LCConnection в том, что не нужно мудохаться подбирая драйвера под "свою" реляционку. Указываете тип РБД при открытии соединения, а он автоматом использует нужный драйвер, работающий именно с этой РДБ.
Не забудьте, что предварительно необходимо установить софт клиента соответствующей СУБД или ODBC и соответствующим образом настроить это. Это терпимо для сервера, но если вам нужна связь с СУБД на клиентском месте, а ваш парк клиентов составляет несколько тысяч установок, то вы просто замудохаетесь делать эти установки/настройки на каждом клиентском месте. Поэтому JDBC гораздо практичнее во всех отношениях.
 
Мы в соцсетях:

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