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

Вниз

Помогите разобраться с ODAC компонентами   Найти похожие ветки 

 
Virgo ©   (2004-09-07 12:32) [0]

Есть такая проблема:

на сервере создан тип

CREATE TYPE test_array_t AS VARRAY (6) OF CHAR(10);
 
Я из Delphi пытаюсь выполнить код

OraQuery1.SQL.Clear;
 OraQuery1.SQL.Add(" DECLARE");
 OraQuery1.SQL.Add("  id NUMBER;");
 OraQuery1.SQL.Add("  my_fields PROGRAMMER.test_array_t;");
 OraQuery1.SQL.Add(" BEGIN");
 OraQuery1.SQL.Add("   programmer.specific.sel_syscoding(10, :my_fields );");
 OraQuery1.SQL.Add(" END;");

 with OraQuery1.Params.ParamByName("nazn_fields").AsArray do begin
   OCISvcCtx:= dmMain.OraSess.OCISvcCtx;
   AllocObject("nazn_fields_t");
 end;

 OraQuery1.Execute;

"хозяином" всех объектов является PROGRAMMER
Под этим PROGRAMMER все работает, захожу под другим пользователем
выдает ошибку - "nazn_fields_t" - не найден

права на процедуру и на этот тип у данного User-a все есть.

Когда пишу AllocObject("programmer.nazn_fields_t"); -
не работает даже под PROGRAMMER - выдает ту же ошибку

Может кто сможет помочь разобраться в чем тут дело?


 
Reindeer Moss Eater ©   (2004-09-07 13:10) [1]

А он у тебя есть (тип), что бы быть найденным?


 
Reindeer Moss Eater ©   (2004-09-07 13:17) [2]

Я например его тоже не нашел.


 
Virgo ©   (2004-09-07 13:20) [3]

Я ошиблась при написании вопроса, конечно же
AllocObject("test_array_t");


 
Reindeer Moss Eater ©   (2004-09-07 13:23) [4]

И предлагаешь дать точный и исчерпывающий ответ по тексту вопроса, имеющему отдаленное отношение к проблеме?

Одно могу сказать определенно:
В сообщения об ошибках надо верить. Надо им верить, сообщениям об ошибках.


 
Virgo ©   (2004-09-07 13:25) [5]

смотри выше повнимательнее


 
Reindeer Moss Eater ©   (2004-09-07 13:25) [6]

with OraQuery1.Params.ParamByName("nazn_fields").AsArray do begin

Параметра "nazn_fields" я, например, тоже в упор не вижу.


 
Reindeer Moss Eater ©   (2004-09-07 13:25) [7]

смотри выше повнимательнее

пишите повнимательнее.


 
Virgo ©   (2004-09-07 13:36) [8]

Хорошо пишу еще раз, на самом деле тип такой есть
я же говорю, под PROGRAMMEROM все работает
просто я поторопилась, прошу прощения

на сервере создан тип

CREATE TYPE nazn_fields_t AS VARRAY (6) OF CHAR(10);
 
Я из Delphi пытаюсь выполнить код

OraQuery1.SQL.Clear;
 OraQuery1.SQL.Add(" DECLARE");
 OraQuery1.SQL.Add("  id NUMBER;");
 OraQuery1.SQL.Add("  nazn_fields PROGRAMMER.nazn_fields_t;");
 OraQuery1.SQL.Add(" BEGIN");
 OraQuery1.SQL.Add("   programmer.specific.sel_syscoding(10, :nazn_fields );");
 OraQuery1.SQL.Add(" END;");

 with OraQuery1.Params.ParamByName("nazn_fields").AsArray do begin
   OCISvcCtx:= dmMain.OraSess.OCISvcCtx;
   AllocObject("nazn_fields_t");
 end;

 OraQuery1.Execute;

"хозяином" всех объектов является PROGRAMMER
Под этим PROGRAMMER все работает, захожу под другим пользователем
выдает ошибку - "nazn_fields_t" - не найден

права на процедуру и на этот тип у данного User-a все есть.

Когда пишу AllocObject("programmer.nazn_fields_t"); -
не работает даже под PROGRAMMER - выдает ту же ошибку


 
Reindeer Moss Eater ©   (2004-09-07 13:40) [9]

права на процедуру и на этот тип у данного User-a все есть.

Я бы убрал на время ODAC и Delphi и проверил справедливость этого высказывания в "плюсе" или еще где.


 
Virgo ©   (2004-09-07 13:43) [10]

в том то и дело, что в SQL Navigator-e
под тем "другим" пользователем этот блок выполняется


 
Virgo ©   (2004-09-07 13:52) [11]

проблема скорее всего в компоненте OraQuery1

with OraQuery1.Params.ParamByName("nazn_fields").AsArray do
begin
OCISvcCtx:= dmMain.OraSess.OCISvcCtx;
AllocObject("nazn_fields_t");
end;

ошибку выдает в это блоке на четвертой строке -
AllocObject("nazn_fields_t");

Что делать, не знаю


 
roottim ©   (2004-09-07 14:23) [12]

>права на процедуру и на этот тип у данного User-a все есть.
через роль или по объектной привилеги??


 
Virgo ©   (2004-09-07 14:26) [13]

и через роль пробовала и по объектной привилегии пробовала
результат один и тот же

я думаю, может еще какие-нибудь привилегии нужны?
может системные какие-нибудь?


 
Reindeer Moss Eater ©   (2004-09-07 14:39) [14]

Вряд ли.
Блок же работает в навигаторе.


 
roottim ©   (2004-09-07 14:40) [15]

дайте всё: роль DBA + объектные привилегии
"programmer." оставте...


 
}|{yk ©   (2004-09-07 14:58) [16]

А это...
alter session set current_schema = YOUR_SESSION
делала?


 
roottim ©   (2004-09-07 15:30) [17]

2}|{yk ©   (07.09.04 14:58) [16]
это избавляет только от префикса programmer


 
Virgo ©   (2004-09-08 06:34) [18]


> А это...
> alter session set current_schema = YOUR_SESSION
> делала?


Помогло :) спасибо большое

а вот

> дайте всё: роль DBA + объектные привилегии

результата не дало


 
roottim ©   (2004-09-08 08:17) [19]

2Virgo ©   (08.09.04 06:34) [18]
видимо либо ODAC неверно отпарсировар строку, либо вы что-то не так написали в имени схемы... по сорсам одака разбор строки идет нормально


 
Virgo ©   (2004-09-08 08:37) [20]


> видимо либо ODAC неверно отпарсировар строку, либо вы что-то
> не так написали в имени схемы... по сорсам одака разбор
> строки идет нормально


что интересно: в этом случае работает только без имени схемы

> with OraQuery1.Params.ParamByName("nazn_fields").AsArray
> do begin
>    OCISvcCtx:= dmMain.OraSess.OCISvcCtx;
>    AllocObject("nazn_fields_t");
>  end;


если добавляю имя схемы - programmer.nazn_fields_t
опять та же ошибка

скорее всего дело в ODAC-е


 
roottim ©   (2004-09-08 09:52) [21]

вот код одака где он проводит разбор
i := Pos(".", Name);
 if i > 0 then begin
   TypeName := Copy(Name, i + 1, Length(Name));
   SchemaName := Copy(Name, 1, i - 1);
   AName := """+ SchemaName + ""."" + TypeName + """; //
 end
 else begin
   TypeName := AnsiUpperCase(Name);
   AName := Name;
   SchemaName := "";
 end;


отсюда видно, что если нет префикса схемы то имя типа передается в oci большими буквами без кавычек.
А в вашем случае  вы пишите префикс.тип маленькими буквами, из которых одак собирает регистрозависимую строку(в кавычках), из-за чего оракл незнает такого типа .. отсюда и баг одака.

ПОПРОБУЙТЕ СДЕЛАТЬ ТОЖЕ САМОЕ С ПРЕФИКСОМ:
AllocObject("PROGRAMMER.NAZN_FIELDS_T");


 
Virgo ©   (2004-09-08 11:10) [22]


> roottim ©  



> ПОПРОБУЙТЕ СДЕЛАТЬ ТОЖЕ САМОЕ С ПРЕФИКСОМ:
> AllocObject("PROGRAMMER.NAZN_FIELDS_T");


а ведь верно, спасибо, в верхнем регистре сработало :)



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.036 c
4-1093424519
Manfred7
2004-08-25 13:01
2004.10.03
Хук на клавиатуру клавиша Win


14-1095165222
infom
2004-09-14 16:33
2004.10.03
Что за проблемы с DevExpress ?


4-1093237731
Станислав
2004-08-23 09:08
2004.10.03
sendkeys


8-1088677157
leonidus
2004-07-01 14:19
2004.10.03
Как извлечь информацию из ID тэгов mp3-файлов


14-1094930070
yanval
2004-09-11 23:14
2004.10.03
крутая реклама дохтура Касперского - помогите, я боюсь!