|
|
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Привет! Есть stored proc (MSSQL2k), которая деляет буквально следующее: создает временную таблицу, а затем делает INSERT, который обламывается с ошибкой "... column does not allow nulls. INSERT fails" (не суть важно в принципе). Так вот, клиент (ADOStoredProc в Delphi 5) не получает exception. При этом, стоит закомментарить создание временной таблицы - исключение доходит. В чем дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 15:24:36 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
SET NOCOUNT ON стоит в процедуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 15:27:51 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Ага. Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. При вызове из ISQLW вида Код: plaintext получаем следующее: Код: plaintext 1. 2. 3. 4. В Delphi - тишина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 15:48:20 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
В ADO объект Command имеет коллекцию ошибок: Код: plaintext ИМХО, там и ищите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 15:54:13 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Однако ADOStoredProc2.Connection.Errors.Count = 0... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 16:18:17 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
В Delphi по-умолчанию, получается только первый рекордсет и на этом все останавливается. SELECT * FROM XCubeLock WITH (TABLOCKX) Вот этот рекордсет получает Delphi, и считает свою миссию выполненной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 17:56:36 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Неа, надо обработку переменной @@error поставить после первого же инсерта и если она <>0 ветвиться на ROLLBACK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 18:07:27 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
А через выходной параметр передавать текст ошибки не пробывали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 18:11:27 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Попробуйте в скрипте SP явно прописать NOT NULL для полей создаваемой временной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2002, 18:30:37 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
В Delphi по-умолчанию, получается только первый рекордсет и на этом все останавливается. SELECT * FROM XCubeLock WITH (TABLOCKX) Вот этот рекордсет получает Delphi, и считает свою миссию выполненной. Неа, надо обработку переменной @@error поставить после первого же инсерта и если она <>0 ветвиться на ROLLBACK. Еще раз. Delphi, получив вышеуказанный набор данных, остальной OUTPUT больше не считывает, чего бы там не было, вместе с ошибками. Исполнение процедуры, конечно же, не прерывается. Просто Delphi больше ничего не пытается прочесть из выходного потока. Поэтому, достаточно выкинуть этот SELECT (совершенно лишний), чтобы получать ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2002, 10:08:31 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Delphi, получив вышеуказанный набор данных, остальной OUTPUT больше не считывает, чего бы там не было, вместе с ошибками. Исполнение процедуры, конечно же, не прерывается. Просто Delphi больше ничего не пытается прочесть из выходного потока. Поэтому, достаточно выкинуть этот SELECT (совершенно лишний), чтобы получать ошибку. Опытным путем дошел таки до этого :) Остается только один вопрос: кто виноват? ADO или надстройка в Delphi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2002, 15:27:07 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
ADO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2002, 16:39:50 |
|
||
|
Как заставить сервер НЕ ПРОМОЛЧАТЬ про ошибку клиенту?
|
|||
|---|---|---|---|
|
#18+
Точнее, совместно, ADO и Delphi, поскольку в принципе возможно перебрать через NextRecordset весь output и добраться до ошибки, но почему-то разработчики Delphi об этом не озаботились. А ADO виновно в том, что могло бы само определить, что среди output имеется ошибка, и пнуть клиента вместо отдачи ему первого набора данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2002, 16:45:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32066205&tid=1818917]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 347ms |

| 0 / 0 |
