Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с ODAC компонентами


Страницы:   1 2

Virgo ©   (2004-09-07 12:32:00) 

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

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

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 - выдает ту же ошибку

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


Virgo   (2004-09-08 11:10:00) [1]


> roottim ©  



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


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


roottim   (2004-09-08 09:52:00) [2]

вот код одака где он проводит разбор
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 08:37:00) [3]


> видимо либо 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 08:17:00) [4]

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


Virgo   (2004-09-08 06:34:00) [5]


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


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

а вот

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

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


roottim   (2004-09-07 15:30:00) [6]

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


}|{yk   (2004-09-07 14:58:00) [7]

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


roottim   (2004-09-07 14:40:00) [8]

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


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

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


Virgo   (2004-09-07 14:26:00) [10]

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

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


roottim   (2004-09-07 14:23:00) [11]

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


Virgo   (2004-09-07 13:52:00) [12]

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

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

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

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


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

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


Reindeer Moss Eater   (2004-09-07 13:40:00) [14]

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

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


Virgo   (2004-09-07 13:36:00) [15]

Хорошо пишу еще раз, на самом деле тип такой есть
я же говорю, под 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:25:00) [16]

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

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


Reindeer Moss Eater   (2004-09-07 13:25:00) [17]

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

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


Virgo   (2004-09-07 13:25:00) [18]

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


Reindeer Moss Eater   (2004-09-07 13:23:00) [19]

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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо