Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.036 c
1-1095609224
Елис
2004-09-19 19:53
2004.10.03
StrinGrid


14-1095338151
infom
2004-09-16 16:35
2004.10.03
Как у вас с логикой ?


4-1093075611
kblc
2004-08-21 12:06
2004.10.03
MCI


3-1094106963
DBL
2004-09-02 10:36
2004.10.03
Добавление данных из одной базы в другую


14-1095330732
Орех
2004-09-16 14:32
2004.10.03
Автоматическое обновление орешника... :))





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский