Форум: "Базы";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизODAC & ORAARRAY Найти похожие ветки
← →
stepan_mk (2005-10-11 17:40) [0]Есть у меня на Оракле пакедж prm_law там есть описан тип
TYPE saldoArray IS VARRAY (7) OF NUMBER;
и функция
FUNCTION get_sud_borg(crem IN NUMBER, ug IN VARCHAR2, dt IN DATE, tp IN saldoArray) RETURN NUMBER;
из делфи мне надо етому параметру tp дать значения делаю так
SpogData: TOraQuery
...
SpogData.ParamByName("Arrtp").AsArray.OCISvcCtx:= Form1.Database.OCISvcCtx;
SpogData.ParamByName("Arrtp").AsArray.AllocObject("prm_LAW.saldoArray"); // здесь ошиПка
for i:=1 to 7 do
begin
if CheckListBox1.Checked[i-1]
then SpogData.ParamByName("Arrtp").AsArray.ItemAsInteger[i-1]:=i
else SpogData.ParamByName("Arrtp").AsArray.ItemAsInteger[i-1]:=0;
end;
Возникает ошиПка type "prm_law"."saldoarray" not fount
← →
Reindeer Moss Eater © (2005-10-11 17:47) [1]Устраняй ошибку.
← →
stepan_mk (2005-10-11 17:51) [2]Интересное предложение.
А как не подскажите, или хотя би в чём ошиПка
← →
Reindeer Moss Eater © (2005-10-11 17:53) [3]В программе ошипка
← →
stepan_mk (2005-10-11 17:55) [4]Тогда покажите как должно быть
← →
Seg (2005-10-12 11:21) [5]Ошибка скорее всего в типе caldoarray.
Почему бы не сделать просто 7 входящих числовых параметров?
Либо этот тип надо как-то фиксировать в Виндах.
← →
stepan_mk (2005-10-12 11:25) [6]Дело в том что параметров может бить от 1 до 7
← →
Seg (2005-10-12 11:33) [7]А нельзя объявить параметры и дефолтовыми значениями?
param1 in number default null,
param2 in number default null
и т.д.
← →
stepan_mk (2005-10-12 12:04) [8]
> А нельзя объявить параметры и дефолтовыми значениями?
>
> param1 in number default null,
> param2 in number default null
Честно говоря уже над етим начинаю подумивать, если за сегодня не добю ка массив, то буду делать через дефолтние значения
← →
Seg (2005-10-12 12:49) [9]Массив этот можно прекрасно использовать внутри Оракла.
Винды не знают такого типа данных. Можно попробовать использовать простой массив на стороне клиента, но 100% гарантии нет.
← →
Val © (2005-10-12 12:55) [10]а причем тут "Винды" ? этот тип может быть реализован в компонентах доступа.
← →
Seg (2005-10-12 13:48) [11]Может и в компонентах доступа, но клиентская часть должна знать о существовании такого типа.
← →
Val © (2005-10-12 13:56) [12]Думаю, автора - знает, раз есть .AsArray :)
А вот работает ли он или им не умеет пользоваться автор - другой вопрос - к знатокам ODAC.
← →
stepan_mk (2005-10-12 14:06) [13]Я уже пробовал разние варианти, последний такой
серверная часть
В пакеджеTYPE saldoArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
...
FUNCTION get_sud_borg(crem IN NUMBER, ug IN VARCHAR2, dt IN date, tp IN saldoArray ) RETURN NUMBER IS
В делфиvar SArray:array of integer;
...
SetLength(SArray,7);
for i:=0 to 6 do
SArray[i]:=i+1;
SpogData.ParamByName("Arrtp").Length:=7;
SpogData.ParamByName("Arrtp").Value:=SArray;
SpogData.Open; // Теперь ошиПка тут
ОшиПка теперь гласит
ERangeError with massage: index of array is not range
Тот самий вопрос обсуждается и здесь
http://www.sql.ru/forum/actualthread.aspx?tid=224717
← →
Seg (2005-10-12 14:25) [14]Arrtp
А что это за параметр, длинной 7?
Строка длинной 7 символов?
← →
stepan_mk (2005-10-12 14:28) [15]
> А что это за параметр, длинной 7?
В оракле он имеет тип
saldoArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER
Тоесть масив.
7 ето значит что он имеет 7 елементов
Визов функции с клиента виглядит такselect .... get_sud_borg(:codrem, :ugoda, :data, :Arrtp )
from ...
where ...
← →
Seg (2005-10-12 14:39) [16]Причем здесь Оракл?
У тебя Делфи не принимает массив в параметр Arrtr.
Какой тип у параметра Arrtr?
← →
stepan_mk (2005-10-12 15:17) [17]В ODAC я определил его как float PL/SQL Table
← →
Seg (2005-10-12 15:22) [18]И как же скрестить массив с таблицей?
SpogData.ParamByName("Arrtp").Length:=7;
усерен, что создается 7 строк в таблице?
На серверной части
saldoArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER
нет явного указания, что в этой таблице 7 строк.
Может все-таки объявить 7 переменных и не париться?
← →
stepan_mk (2005-10-12 15:29) [19]
> На серверной части
> saldoArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER
> нет явного указания, что в этой таблице 7 строк
Ето что-то типа array of integer в делфи.
← →
Seg (2005-10-12 15:34) [20]Ето что-то типа array of integer в делфи.
Может в таком случае вернуть тип, объявленный ранее и попробовать на нем?
TYPE saldoArray IS VARRAY (7) OF NUMBER;
← →
stepan_mk (2005-10-12 15:51) [21]
>
> Может в таком случае вернуть тип, объявленный ранее и попробовать
> на нем?
>
> TYPE saldoArray IS VARRAY (7) OF NUMBER;
Пробовал, ситауция та же.
А если в делфи поставить SArray:array[0..6] of integer;
то даже не компилируются
ошипка здесь SpogData.ParamByName("Arrtp").Value:=SArray;
несовместимость типов
← →
Seg (2005-10-12 15:57) [22]Так объяви 7 переменных и все.
← →
stepan_mk (2005-10-12 16:16) [23]
> Так объяви 7 переменных и все.
Уболтал!
Так и сделал.
← →
Val © (2005-10-12 16:20) [24]Обошли проблему. Стоило бы посмотреть примеры работы с массивом на ODAC, думаю.
← →
stepan_mk (2005-10-12 16:28) [25]Смотрел я примери, там их два есть, но они какие то узкие масив только с клиента передаётся, а в моём случае ещё и параметром функции должен приниматся :(.
← →
Seg (2005-10-12 16:29) [26]Проще надо программировать, проще...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.015 c