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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

...
Рейтинг: 0 / 0
Хочу такую, как QA !
    #32293333
Фотография shane54
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Как я понял задачу, тебе нужно просто каждый раз, когда ты делаешь вставку проверять, произошла ли ошибка или нет. Я не знаю как там у вас в 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
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Хочу такую, как QA !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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