Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.036 c
14-1131190184
Слоник
2005-11-05 14:29
2005.11.27
Как?? как увеличить раздел с Win2003 Server?


14-1130921576
TUser
2005-11-02 11:52
2005.11.27
Освобождение ресурсов при завершении процесса


9-1120983162
Slavik2005
2005-07-10 12:12
2005.11.27
Как сделать нормальное зеркало в GLScene


8-1120465795
vladgul
2005-07-04 12:29
2005.11.27
Использование PTP (Picture Transfer Protocol) в своей программе


5-1112337769
Viva
2005-04-01 10:42
2005.11.27
Текст опубликованного в компоненте события