![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с ODAC компонентами
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');