Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Есть такая глобальная проблема ! Исходные данные: В таблицах MS SQL большинство проверок на целостность и непротиворечивость реализовано на основе стандартных средств (Keys, Checks, Allow Null и т.д.), что в принципе и рекомендуется. Необходимо время от времени загружать данные из внешних таблиц с помощью SP. При выполнении SP в QA все выполняется очень удобно - ошибки появляются в QA по мере их возникновения, коннект не обрывается, SP выполняется до конца. Я вижу все ошибки (штук 10-15) при загрузке, исправляю их в исходных таблицах (или даю задание на исправление, тем кто ввел эти данные) и со второго раза все загружается. При выполнении из клиентсой программы ((CBuilder или Delphi)+ADO) при первой же ошибке, генерируется исключение, коннект обрывается, работа SP прекращается в произвольном месте. Т.о. все ошибки я исправлю только после 10-15 запусков SP, которая сама выполняется в среднем 20 мин. Я пытался анализировать ошибки и дублировать их проверку в SP, но во-первых - это некрасиво, во-вторых SP очень сильно "разбухает" и "тормозит", в третьих - все ошибки все равно не проверишь, а еще и наделаешь новых. Вопрос: Можно ли клиентскую часть ((CBuilder или Delphi)+ADO) заставить вести себя как QA, т.е перехватывать сообщения об возникающих ошибках выводить их в отдельное окно без прекращения выполнения SP ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2003, 16:49 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Так ошибки то отлавливают сначала, а потом уж процедуру используют в клиенте. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2003, 17:45 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Не совсем понял. Вернее совсем не понял. Вопрос в следующем - как обрабатывать возникающие в SP ошибки или собственные RAISERROR с продолжением работы SP (как в QA) Пример SP: Объявляю курсор на исходной таблице (около 50 столбцов и 250000 записей). Открываю. В цикле читаю по одной записи, делаю проверки и некоторые расчеты и по одной записи записываю в другую таблицу. Закрываю курсор. Освобождаю курсор. Некоторые записи не могут быть вставлены (или обновлены) из-за того что не удовлетворяют условиям (check, not null, unique и др.). Возникает ошибка. В QA - ошибка высветилась и SP продолжает работать дальше - в конце я вижу все ошибки. В программе первая же ошибка вызывает исключение и прерывает работу SP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2003, 22:21 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
2Vova_GVP Курсор - тормозит,а QA - нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2003, 16:36 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Запустить Profiler и посмотреть, что уходит на сервер в случае QA и что - в случае твоей программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2003, 20:44 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
2Balashov Denis Столкнулся с подобной ситуацией. Просмотр профалером ничего не дас так как в обоих случаях на сервер уходить лишь имя SP с параметрами... И еще похожий вопрос как иметь возможность оборвать выполнение запроса вручную... или хотябы по таймеру... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 13:59 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
To Denis Ну твоему горю можно помочь. Если используется компонент TADOQuery, то для выхода по таймауту ADOQr->Connection->CommandTimeout=сколько_нужно // 0-бесконечно Если используется TADOCommand, то свойство CommandTimeout есть в компоненте. Если хочешь прервать запрос в любое время - то выполняешь его в асинхронном режиме (устанавливаешь нужные ExecuteOptions) и используешь метод Cancel(), когда нужно. PS Я использую CBuilder. Для Delphi - тоже самое только вместо стрелок точки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 15:24 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Vova_GVP писал:как обрабатывать возникающие в SP ошибки или собственные RAISERROR с продолжением работы SP С продолжением - никак (насколько я помню) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 15:34 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Что значит никак. А как же тогда Query Analyzer это делает? Он преспокойно выводит сообщения об ошибках и продолжает выполнять SP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 15:48 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
И вообще это абсолютно нелогичное поведение программы. Зачем я тогда закрываю курсор и снимаю блокировки в конце SP, если она обрывается в произвольном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 15:51 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Очень даже логичное - смысл выполнять процедуру до конца, если в ней ошибка? -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 17:54 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
В принципе, это можно сделать, если использовать SQL-DMO. Но практически, это означает полное написание DBAware-интерфейса. Если он особо не нужен - то пжлста... пытался анализировать ошибки и дублировать их проверку в SP, но во-первых - это некрасиво, во-вторых SP очень сильно "разбухает" и "тормозит", в третьих - все ошибки все равно не проверишь, а еще и наделаешь новых Но вот эти ваши строки наводят определенные подозрения... SP от проверок не замедляется - во всяком случае, меньше, чем на те же проверки на клиенте. Вот уже действительно, "ошибки все равно не проверишь, только новых наделаешь". Тогда лучше вообще ничего не писать... :) Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 18:06 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
To Tygra Во-первых ошибок в процедуре НЕТ. Ошибки могут быть лишь в загружаемых данных. Во-вторых, чтобы понять зачем выполнять процедуру до конца нужно ВНИМАТЕЛЬНО прочитать вопрос. В-третьих поведение НЕЛОГИЧНОЕ потому, что в любом случае при ошибке или нет ресурсы должны освободиться - курсоры закрыться и освободиться, а блокировки сняться. Это аналогично тому, что при ошибке в программе написанной на Delphi в памяти остается "мусор" из неуничтоженных компонентов массивов и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 18:22 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Ты это не ко мне - это в Microsoft. Но если хочешь, могу им передать, потому как иногда с ними вижусь -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 20:01 |
|
||
|
Хочу такую, как QA !
|
|||
|---|---|---|---|
|
#18+
Так. Как я понял задачу, тебе нужно просто каждый раз, когда ты делаешь вставку проверять, произошла ли ошибка или нет. Я не знаю как там у вас в MSSQL, в Oracle выскакивает ошибка "Integrity Constrain Violated" - нарушена целостность данных. Соотвественно, делаешь защищённый блок из Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. в котором проверяешь, вставилась ли строчка или нет. Строчки, которые не вставились - выводишь в свой список ошибок. Ничего при этом обрываться не будет и всё будет пучком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2003, 20:22 |
|
||
|
|

start [/forum/topic.php?fid=58&tid=2116446]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 331ms |

| 0 / 0 |
