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

Вниз

Получить текст с сообщением об ошибке.   Найти похожие ветки 

 
SergP.   (2006-09-04 12:32) [0]

ADO, Oracle
Если при выполнении некой PL/SQL процедуры:


with TADOCommand.Create(Application) do
   try
       Connection:=ADConn;
       CommandText:="begin ....... ; end;";
       Execute;
   finally
     free;
   end;


возникло исключение, то можно ли получить текст с соответствующим Оракловским сообщением?


 
Anatoly Podgoretsky ©   (2006-09-04 12:39) [1]

Для того, чтобы обрабатывать ошибку надо включить блок try except end


 
Desdechado ©   (2006-09-04 12:40) [2]

можно, как всегда, через except или глобальный обработчик


 
SergP.   (2006-09-04 13:02) [3]

> [1] Anatoly Podgoretsky ©   (04.09.06 12:39)
> Для того, чтобы обрабатывать ошибку надо включить блок try
> except end


Ну у меня примерно так все:

try
...
with TADOCommand.Create(Application) do
  try
      Connection:=ADConn;
      CommandText:="begin ....... ; end;";
      Execute;
  finally
    free;
  end;
...
except
...
end;



Но мне нужно не просто обработать ошибку, а узнать что за ошибка...

ну типа когда я выполняю процедуру в SQLPlus я получаю:

ERROR at line 1:
ORA-01401: inserted value too large for column
ORA-06512: at "XXXXX.XXXXXX", line 983
ORA-06512: at line 2


Вот этот текст можно получить или нет?


 
ANB ©   (2006-09-04 13:08) [4]


> Вот этот текст можно получить или нет?

Это не текст ошибки, а стек ошибок. И вытащить его не так просто.


 
ANB ©   (2006-09-04 13:10) [5]

А через ADO будет тем более проблематично.

А текст ошибки лежим в свойстве Message класса Exception


 
SergP.   (2006-09-04 13:11) [6]

> [4] ANB ©   (04.09.06 13:08)
>
> > Вот этот текст можно получить или нет?
>
> Это не текст ошибки, а стек ошибок. И вытащить его не так
> просто.


Плохо...
ну ладно. Тогда придется обойтись без этого...


 
ANB ©   (2006-09-04 13:16) [7]


> Плохо...
> ну ладно. Тогда придется обойтись без этого...

Используй одак, и счастья будет больше. Он стек тянет на клиента.


 
SergP.   (2006-09-04 13:30) [8]

> Используй одак, и счастья будет больше. Он стек тянет на
> клиента.


Дык я так и не нашел нужные компоненты... Три разных библиотеки компонентов "для прямого доступа" скачал, но так и не понял почему в них параметры подключения указываются не так как это должно быть при прямом доступе.
Почему там базу можно указать только из tnsnames.ora , и пр.


 
Desdechado ©   (2006-09-04 13:34) [9]

> Это не текст ошибки, а стек ошибок. И вытащить его не так просто.
dbExpress его вынимает как текст ошибки. Без всяких проблем. Хотя, возможно, это особенности драйвера.


 
Sergey13 ©   (2006-09-04 13:34) [10]

> [8] SergP.   (04.09.06 13:30)

Остается сказать как должны указываться параметры при прямом доступе и что пишется в АДО (неужели строка поключения из tnsnames.ora не учавствует? - я ен в курсе)?


 
SergP.   (2006-09-04 13:41) [11]

> [10] Sergey13 ©   (04.09.06 13:34)
> > [8] SergP.   (04.09.06 13:30)
>
> Остается сказать как должны указываться параметры при прямом
> доступе и что пишется в АДО (неужели строка поключения из
> tnsnames.ora не учавствует? - я ен в курсе)?


Ну в ADO - логин/пароль/локальный TNS
А насчет прямого доступа, я всегда считал что:
Логин/пароль/SID/Хост/Порт

Ну может я не прав. Не знаю точно... Просто помню что находил такие компоненты для прямого доступа, но это давно было. Сейчас искал - никак найти не получается...


 
ANB ©   (2006-09-04 13:42) [12]


> это должно быть при прямом доступе.

То, что ты хочешь, это не прямой доступ, а кривой.


 
ANB ©   (2006-09-04 13:43) [13]


> находил такие компоненты для прямого доступа

ОДАК позволяет работать без клиента или с клиентом, но без использования tnsnames.


 
parovoZZ ©   (2006-09-04 13:45) [14]

Подойдёт или нет?

ADOConnect.Errors.Get_Item (0).NativeError;
ADOConnect.Errors.Item[0].Description;


 
SergP.   (2006-09-04 13:51) [15]

> [13] ANB ©   (04.09.06 13:43)
>
> > находил такие компоненты для прямого доступа
>
> ОДАК позволяет работать без клиента или с клиентом, но без
> использования tnsnames.


Откуда он тогда должен знать с чем я хочу работать, если SID , хост и порт там не указывать и tnsnames не используется?


 
SergP.   (2006-09-04 13:51) [16]

> [14] parovoZZ ©   (04.09.06 13:45)
> Подойдёт или нет?
>
> ADOConnect.Errors.Get_Item (0).NativeError;
> ADOConnect.Errors.Item[0].Description;


Щас проверим...


 
SergP.   (2006-09-04 13:54) [17]

> [14] parovoZZ ©   (04.09.06 13:45)
> Подойдёт или нет?
>
> ADOConnect.Errors.Get_Item (0).NativeError;
> ADOConnect.Errors.Item[0].Description;


Оно.
Спасибо!!!


 
ANB ©   (2006-09-04 14:04) [18]


> Откуда он тогда должен знать с чем я хочу работать, если
> SID , хост и порт там не указывать и tnsnames не используется?
>

Кто сказал, что его там нельзя указать ?


 
SergP.   (2006-09-04 14:07) [19]

> Кто сказал, что его там нельзя указать ?

Я там такого не нашел


 
ANB ©   (2006-09-04 14:34) [20]


> SergP.   (04.09.06 14:07) [19]

Кликни два раза по TOraSession и узнаешь много интересного. :)


 
SergP.   (2006-09-04 15:20) [21]

> [20] ANB ©   (04.09.06 14:34)
>
> > SergP.   (04.09.06 14:07) [19]
>
> Кликни два раза по TOraSession и узнаешь много интересного.
> :)


Кликнул. открылся ихний Экплорер, в котором ничего особого нет, хотя если попытаться залогиниться то предлагает ввести логин/пароль и базу, где предлагается на выбор то что у меня прописано в tnsnames.ora


 
ANB ©   (2006-09-04 15:39) [22]


> SergP.   (04.09.06 15:20) [21]

Ты точно по одаковской TOraSession кликаешь ? Насколько я помню, там есть галка Net и возможность вводить хост, сид и IP. Короче, у этого компонента есть аналог строки коннекта, в которую он и кидает все, что ты написала в отдельных свойствах. Через нее можно работать, если не хочешь указывать TNS. (только нафига это нужно). Вообще, странная идея уходить с имеющихся нативных компонентов на универсальные только из-за того, что не смог подключиться напрямую.
Это называется создавать себе трудности и мужественно их преодолевать. Вы, часом, срочную в армии не служили ?


 
SergP.   (2006-09-04 16:43) [23]

> [22] ANB ©   (04.09.06 15:39)
> > SergP.   (04.09.06 15:20) [21]
>
> Ты точно по одаковской TOraSession кликаешь ?


А черт ее знает... Я по поисковикам по запросу "Компоненты Delphi прямого доступа Oracle" понаходил несколько таких компонентов, понаставлял.
Если не трудно, дайте ссылку на 100% одаковский компонент.
А то у меня есть подозрение что в инете очень много чего называется компонентами прямого доступа лишь по той причине что позволяют работать без BDE...


> Вы, часом, срочную в армии не служили ?


Служил. :-)


 
ANB ©   (2006-09-04 16:50) [24]


> Служил. :-)

И что, неужели армия вас не научила, что это хреновый подход ?
Нет, если, конечно, согласно ТЗ нужно писать на ADO+Oracle и заказчик/начальство никак не хочет использовать ничего другого - это одно. А зачем искать себе проблемы добровольно ?


 
ANB ©   (2006-09-04 16:51) [25]


> Если не трудно, дайте ссылку на 100% одаковский компонент.

К сожалению, ссылка не поможет. Вы в москве ?


 
SergP.   (2006-09-04 17:02) [26]


> [24] ANB ©   (04.09.06 16:50)
>
> > Служил. :-)
>
> И что, неужели армия вас не научила, что это хреновый подход
> ?
> Нет, если, конечно, согласно ТЗ нужно писать на ADO+Oracle
> и заказчик/начальство никак не хочет использовать ничего
> другого - это одно. А зачем искать себе проблемы добровольно
> ?


Да нет. Заказчика нет. Пишу по собственной инициативе, чтобы облегчить жизнь себе и удаленным сотрудникам.
Да и щас я пока пишу на АДО, но стараюсь так чтобы если вдруг найду нормальные ODAC компоненты, то чтобы переделка не заняла много времени.

> [25] ANB ©   (04.09.06 16:51)
>
> > Если не трудно, дайте ссылку на 100% одаковский компонент.
>
> К сожалению, ссылка не поможет. Вы в москве ?


К сожалению нет... Даже не в России...

А почему ссылка не поможет?


 
ANB ©   (2006-09-04 17:07) [27]


> А почему ссылка не поможет?

Потому что по ней качать если и дадут, то триал. А так бы лично дал . . .


 
sniknik ©   (2006-09-04 17:12) [28]

> Но мне нужно не просто обработать ошибку, а узнать что за ошибка...
> ну типа когда я выполняю процедуру в SQLPlus я получаю:
> ERROR at line 1:
> ORA-01401: inserted value too large for column
> ORA-06512: at "XXXXX.XXXXXX", line 983
> ORA-06512: at line 2
> Вот этот текст можно получить или нет?
что провайдер передаст то и получиш (если это ошибка а не сообщение, вот его получить проблемнее)
не знаю с ораклом, проверить не могу но от FB на неверный запрос
SELECT * FROM TABLE1
WHERE ID IS Nil
например получаю
EOleException:

Dynamic SQL Error
SQL error code = -104
Token unknown - line 2, char 13
Nil

все правильно, между прочим. наверняка и для оракла будет также, проверить ка говорил не могу, счас не оракл стоит, но могу послать для самостоятельного теста прогу на ADO.


 
SergP.   (2006-09-04 17:12) [29]

> [27] ANB ©   (04.09.06 17:07)
>
> > А почему ссылка не поможет?
>
> Потому что по ней качать если и дадут, то триал. А так бы
> лично дал . . .


Может по мылу? glukmaker@gmail.com


 
ANB ©   (2006-09-04 17:17) [30]


> Может по мылу? glukmaker@gmail.com

У нас траффик ограничен. А вместо мыла вообще лотус. Так что пока облом.


 
SergP.   (2006-09-04 17:19) [31]

> [28] sniknik ©   (04.09.06 17:12)


Просто в цикле несколько раз выполняется процедура, и иногда при некоторых входных параметрах возникают подобные сообщения
> ERROR at line 1:
> ORA-01401: inserted value too large for column
> ORA-06512: at "XXXXX.XXXXXX", line 983
> ORA-06512: at line 2

вот я и хотел сделать чтобы поскладывать их в лог, чтобы юзер потом мог его просмотреть и проанализировать...
Что касается ADO, то мне [14] parovoZZ ©   (04.09.06 13:45) помогло...


 
ANB ©   (2006-09-04 17:21) [32]


> SergP.   (04.09.06 17:19) [31]

Вообще то хорошим подходом было бы ошибки исправить, а не скидывать юзеру, который их все равно не поймет :)
Эта ошибка означает, что вставляемое значение не лезет в поле таблицы.


 
SergP.   (2006-09-04 17:26) [33]

> [30] ANB ©   (04.09.06 17:17)
>
> У нас траффик ограничен.


Хм... Жаль...

> [30] ANB ©   (04.09.06 17:17)
>  А вместо мыла вообще лотус. Так
> что пока облом.


Ну не обязательно мыло, можно было бы и по ftp, если бы не:
> [30] ANB ©   (04.09.06 17:17)
>
> У нас траффик ограничен.


Ладно... С АДО проблема решена. А что касается ОДАК - может когда-нить найду что-то и переделаю...


 
SergP.   (2006-09-04 17:30) [34]

> [32] ANB ©   (04.09.06 17:21)
>
> > SergP.   (04.09.06 17:19) [31]
>
> Вообще то хорошим подходом было бы ошибки исправить, а не
> скидывать юзеру, который их все равно не поймет :)
> Эта ошибка означает, что вставляемое значение не лезет в
> поле таблицы.


Ну во первых у каждого такого "юзера" своя база со своими ошибками, да и половина этих "юзеров" - такие же сисадмины как и я.



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

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

Наверх




Память: 0.56 MB
Время: 0.052 c
3-1156919569
ddddd
2006-08-30 10:32
2006.10.29
Как проверить есть ли в Query поле с заданным названием?


15-1160447688
Slider007
2006-10-10 06:34
2006.10.29
С днем рождения ! 10 октября


15-1159951163
BadTester
2006-10-04 12:39
2006.10.29
Оцените, вот наднях написал программу Smart FM !!!


2-1160537533
pkm
2006-10-11 07:32
2006.10.29
Типизированный файл.


6-1149207572
Валерий
2006-06-02 04:19
2006.10.29
Ошибка до перехвата исключения