Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Хочу такую, как QA ! / 16 сообщений из 16, страница 1 из 1
10.10.2003, 16:49
    #32290236
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Есть такая глобальная проблема !

Исходные данные:
В таблицах 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 ?
...
Рейтинг: 0 / 0
11.10.2003, 17:45
    #32290625
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Так ошибки то отлавливают сначала, а потом уж процедуру используют в клиенте.

-- Tygra's --
...
Рейтинг: 0 / 0
11.10.2003, 22:21
    #32290660
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Не совсем понял.
Вернее совсем не понял.
Вопрос в следующем - как обрабатывать возникающие в SP ошибки или собственные RAISERROR с продолжением работы SP (как в QA)

Пример SP:
Объявляю курсор на исходной таблице (около 50 столбцов и 250000 записей).
Открываю.
В цикле читаю по одной записи, делаю проверки и некоторые расчеты и по одной записи записываю в другую таблицу.
Закрываю курсор.
Освобождаю курсор.

Некоторые записи не могут быть вставлены (или обновлены) из-за того что не удовлетворяют условиям (check, not null, unique и др.). Возникает ошибка.
В QA - ошибка высветилась и SP продолжает работать дальше - в конце я вижу все ошибки.
В программе первая же ошибка вызывает исключение и прерывает работу SP.
...
Рейтинг: 0 / 0
12.10.2003, 16:36
    #32290763
Антон Ковалев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
2Vova_GVP
Курсор - тормозит,а QA - нет...
...
Рейтинг: 0 / 0
12.10.2003, 20:44
    #32290806
Balashov Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Запустить Profiler и посмотреть, что уходит на сервер в случае QA и что - в случае твоей программы.
...
Рейтинг: 0 / 0
14.10.2003, 13:59
    #32292662
Sphinx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
2Balashov Denis
Столкнулся с подобной ситуацией.
Просмотр профалером ничего не дас так как в обоих случаях на сервер уходить лишь имя SP с параметрами...
И еще похожий вопрос как иметь возможность оборвать выполнение запроса вручную... или хотябы по таймеру...
...
Рейтинг: 0 / 0
14.10.2003, 15:24
    #32292803
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
To Denis

Ну твоему горю можно помочь.
Если используется компонент TADOQuery, то для выхода по таймауту
ADOQr->Connection->CommandTimeout=сколько_нужно // 0-бесконечно

Если используется TADOCommand, то свойство CommandTimeout есть в компоненте.

Если хочешь прервать запрос в любое время - то выполняешь его в асинхронном режиме (устанавливаешь нужные ExecuteOptions) и используешь метод Cancel(), когда нужно.

PS
Я использую CBuilder. Для Delphi - тоже самое только вместо стрелок точки.
...
Рейтинг: 0 / 0
14.10.2003, 15:34
    #32292820
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Vova_GVP писал:как обрабатывать возникающие в SP ошибки или собственные RAISERROR с продолжением работы SP

С продолжением - никак (насколько я помню)

-- Tygra's --
...
Рейтинг: 0 / 0
14.10.2003, 15:48
    #32292860
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Что значит никак.
А как же тогда Query Analyzer это делает?
Он преспокойно выводит сообщения об ошибках и продолжает выполнять SP.
...
Рейтинг: 0 / 0
14.10.2003, 15:51
    #32292866
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
И вообще это абсолютно нелогичное поведение программы.
Зачем я тогда закрываю курсор и снимаю блокировки в конце SP, если она обрывается в произвольном месте.
...
Рейтинг: 0 / 0
14.10.2003, 17:54
    #32293122
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Очень даже логичное - смысл выполнять процедуру до конца, если в ней ошибка?

-- Tygra's --
...
Рейтинг: 0 / 0
14.10.2003, 18:06
    #32293156
aag
aag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
В принципе, это можно сделать, если использовать SQL-DMO. Но практически, это означает полное написание DBAware-интерфейса. Если он особо не нужен - то пжлста...

пытался анализировать ошибки и дублировать их проверку в SP, но во-первых - это некрасиво, во-вторых SP очень сильно "разбухает" и "тормозит", в третьих - все ошибки все равно не проверишь, а еще и наделаешь новых

Но вот эти ваши строки наводят определенные подозрения... SP от проверок не замедляется - во всяком случае, меньше, чем на те же проверки на клиенте. Вот уже действительно, "ошибки все равно не проверишь, только новых наделаешь". Тогда лучше вообще ничего не писать... :)


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
14.10.2003, 18:22
    #32293198
Vova_GVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
To Tygra

Во-первых ошибок в процедуре НЕТ. Ошибки могут быть лишь в загружаемых данных.
Во-вторых, чтобы понять зачем выполнять процедуру до конца нужно ВНИМАТЕЛЬНО прочитать вопрос.
В-третьих поведение НЕЛОГИЧНОЕ потому, что в любом случае при ошибке или нет ресурсы должны освободиться - курсоры закрыться и освободиться, а блокировки сняться.
Это аналогично тому, что при ошибке в программе написанной на Delphi в памяти остается "мусор" из неуничтоженных компонентов массивов и т.д.
...
Рейтинг: 0 / 0
14.10.2003, 20:01
    #32293315
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Ты это не ко мне - это в Microsoft. Но если хочешь, могу им передать, потому как иногда с ними вижусь

-- Tygra's --
...
Рейтинг: 0 / 0
14.10.2003, 20:11
    #32293325
DarkCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
tygra, я бы тебе сказал, что им передать, да боюсь что тогда Купер этот топик грохнет.

...
Рейтинг: 0 / 0
14.10.2003, 20:22
    #32293333
shane54
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хочу такую, как QA !
Так. Как я понял задачу, тебе нужно просто каждый раз, когда ты делаешь вставку проверять, произошла ли ошибка или нет. Я не знаю как там у вас в MSSQL, в Oracle выскакивает ошибка "Integrity Constrain Violated" - нарушена целостность данных.
Соотвественно, делаешь защищённый блок из

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
try
    ...
    ADO.SQL.Clear;
    ADO.SQL.Text := 'insert ... into ....';
    ADO.Execute;
    // Не ручаюсь за точность синтаксиса - работаю с ODAC'ом
    ...
except
    on E: Exception do // Чтобы отлавливать все возможные ошибки
        ...
        // Запись ошибки в лог
end;


в котором проверяешь, вставилась ли строчка или нет. Строчки, которые не вставились - выводишь в свой список ошибок. Ничего при этом обрываться не будет и всё будет пучком.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Хочу такую, как QA ! / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]