|
|
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Подскажите, плз. С помощью sqlexec выполняю INSERT в таблицу БД SQL. В таблице срабатывает INSERT TRIGGER и контролирует запись, код возврата sqlexec я анализирую, но TRIGGER еще выдает диагностику - что в записи не так через raiserror. Так вот, как получить это raiserror сообщение триггера? Устроит подсказка типа "где посмотреть". Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 10:54:23 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
SQLEXEC(nConnectionHandle, cSQLCommand, [CursorName] ) или в курсоре SQLRESULT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 10:57:50 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Raiserror сервера ловится AERROR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 10:58:41 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
To Диченко: Можно поподробнее, мож пример какой, а ? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 12:29:08 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 12:34:13 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
А если SQLEXEC отработал правильно (>0) ? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 12:51:11 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Vladimir M Sklyar А если SQLEXEC отработал правильно (>0) ? Posted via ActualForum NNTP Server 1.1 1 - выполнение прошло успешно, 0 - все еще выполняется (для асинхронного режима) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 12:54:53 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
"Диченко" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:1460563@sql.ru... > Vladimir M Sklyar > > А если SQLEXEC отработал правильно (>0) ? > > 1 - выполнение прошло успешно, 0 - все еще выполняется (для асинхронного режима) Это понятно, но вопрос был про RAISERROR - как его отловить на клиенте ? Например у пользователя нету прав на выполнение некой комманды, а выяснилось это по середине выполнения некой ХП, которая в свою очередь отработала правильно. Т.е. нада либо как-то завершить работу ХП с возвратом параметра через курсор (как предлагал LEAF) или ..... ? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 13:07:18 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Vladimir M Sklyar "Диченко" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:1460563@sql.ru... > Vladimir M Sklyar > > А если SQLEXEC отработал правильно (>0) ? > > 1 - выполнение прошло успешно, 0 - все еще выполняется (для асинхронного режима) Это понятно, но вопрос был про RAISERROR - как его отловить на клиенте ? Например у пользователя нету прав на выполнение некой комманды, а выяснилось это по середине выполнения некой ХП, которая в свою очередь отработала правильно. Т.е. нада либо как-то завершить работу ХП с возвратом параметра через курсор (как предлагал LEAF) или ..... ? Posted via ActualForum NNTP Server 1.1 Если у пользователя нет прав на выполнение ХП, то после выполнения AERROR(laError), в laError[1,5] содержаться значение 229. А если RAISERROR был "запрограммирован" в ХП, например как Код: plaintext то laError[1,5] будет равен 50000 Следовательно, если sqlexec работает с ХП, целесообразней sqlexec завернуть в класс-оболочку, в которой обрабатывать реакцию поведения sqlexec. Внутри оболочки будет описана реакция sqlexec и на ошибку 229 и на 50000 и на все остальное, вплоть до критических ошибок, по которым нужно закрыть все формы, отключиться от сервера и выкинуть юзера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 13:16:26 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Кажеться я понял, нада крутить параметрами RAISERROR Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 13:20:42 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Владимир, дело в том, что либо выполнение Вашей XP будет прервано (по RIASERROR или в результате "штатной" ошибки сервера) - в этом случае SQLExec()<0 и текст ошибки через AERROR() Либо Ваша ХП как-то обработает не критичную ошибку без прерывания выполнения. В этом случае SQLExec()>0 и определить тот факт, что произошла ошибка можно будет только по содержимому возвращаемого курсора. Тогда надо будет повторно выполнить SQLExec() для вытягивания с сервера причины ошибки. Возможно, тут Вам поможет SQLMoreResult() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2005, 13:21:00 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
ДиченкоRaiserror сервера ловится AERROR А как бы получить сам текст этого Raiserror? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 11:01:20 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
GFrunze ДиченкоRaiserror сервера ловится AERROR А как бы получить сам текст этого Raiserror? Он будет там же, в массиве, сформированном по AERROR() PS: Неужели так трудно прочитать HELP или просто посмотреть, что же именно вернет AERROR()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 11:17:52 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
После AERROR(lErr) lErr[2] - Текст ошибки С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 11:21:32 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
ВладимирМ GFrunze ДиченкоRaiserror сервера ловится AERROR А как бы получить сам текст этого Raiserror? Он будет там же, в массиве, сформированном по AERROR() PS: Неужели так трудно прочитать HELP или просто посмотреть, что же именно вернет AERROR()? В SQL процедуре есть фрагмент : Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 12:11:55 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
А ЧТО получил? Приведи полностью содержимое всех элементов полученного массива. Учти, что твой текст там будет не в чистом виде, а обрамлен другим текстом, указывающим на то, откуда этот текст вообще взялся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 12:53:29 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
ВладимирМА ЧТО получил? Приведи полностью содержимое всех элементов полученного массива. Учти, что твой текст там будет не в чистом виде, а обрамлен другим текстом, указывающим на то, откуда этот текст вообще взялся. SQL процедура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. FOXPRO prg: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Результат : Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 14:22:08 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Ничего себе! Вы отлаживаетесь в базе "master"?! Это круто! Это по нашему! Это действительно "бла-бла-бла"! По другому не скажешь. Ну, а если по сути, то тут нет ошибки. В вашей процедуре получается следующее: Выполняется запрос select * from pubs..employee И его результат немедленно отправляется клиенту! А куда же еще? Вы ведь не написали куда его направить! Настройка SET NOCOUNT ON всего-лишь предотвращает отображение информации о том, сколько записей было выбрано в этом запросе. А вот после успешной отправки результата запроса отправляется еще и прерывание с сообщением об ошибке! А куда его вставить? FoxPro ведь по умолчанию рассчитывает принять только один результат! Вот и происходит наложение 2 возвращаемых значений с непредсказуемым результатом. Измените свой код хотя бы так: Код: plaintext 1. 2. 3. 4. 5. Смысл в том, чтобы клиенту было ДО команды RAISERROR() не было послано никаких сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 15:07:49 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
А если такой вот классический пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 15:25:39 |
|
||
|
Ответ от sqlexec...
|
|||
|---|---|---|---|
|
#18+
Sergey ChА если такой вот классический пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. И где же этот 'nothing to do'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2005, 18:02:31 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=321&tid=1594221]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 334ms |

| 0 / 0 |
