Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.016 c
14-1131085162
БарЛог
2005-11-04 09:19
2005.11.27
Идеальный человек


4-1127564241
Реактор
2005-09-24 16:17
2005.11.27
Keybd_Event не хочет нажимать на "точку"


2-1131697453
Perf2k2
2005-11-11 11:24
2005.11.27
DateTimePicker - нужно, чтобы он был пустым


14-1131377741
DiamondShark
2005-11-07 18:35
2005.11.27
Net 2.0 и все-все-все


4-1127404057
FunkyByte
2005-09-22 19:47
2005.11.27
Перехват API-функции





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский