![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Microsoft SQL Server и RAISERROR [D7, MSSQL]
alexnmsk © (2008-11-27 10:16:00)Добрый день, уважаемые мастера. Вопрос к знатокам MSSQL.
Имеется хранимая процедура на сервере. Для простоты сократим код до такого:
SELECT * FROM MyTable
RAISERROR('Ошибка',16,1)
В этом случае в клиентской программе исключения не возникает. Изменим процедуру:
RAISERROR('Ошибка',16,1)
SELECT * FROM MyTable
Теперь все нормально. Подключаюсь к серверу через ADO. Проблема, как я понимаю, известная :
http://www.delphisources.ru/pages/faq/base/bde_sql_links_questions.html
см. пункт 9.
Теперь вопрос - кто-нибудь может обойти эту проблему? Можно ли сбросить результаты внутри ХП?
ANB (2008-12-04 17:20:00) [1]
> > ДО - оно в многопользовательском режиме не всегда помогает.
>
>
>
> Я вот как-то однопользовательские режимы и не делал никогда.
>
А я не писал, что проверки ДО - это совсем плохо. Просто иногда - бессмысленно.
Самое простое - проверка на уникальность. Если проверять селектом ДО вставки, то никто не гарантирует, что за время между проверкой и вставкой никто дублирующую запись не засунет. А эксепшион - он завсегда вылезет.
Другое дело, что в случае T-SQL выполнение хранимки, скорее всего при этом не прервется . . .
Ega23 (2008-12-04 15:21:00) [2]
> провели 15-20 проверок (запрос-ответ)
Зачем?????
И потом - зачем именно Exception возвращать?
Павел Калугин (2008-12-04 15:06:00) [3]> [21] clickmaker © (04.12.08 15:00)
естественно имеют
прользователь должен сразу видеть в чем лажа
иначе он будеит 15 -20 раз капу давить получать очередной отлуп и кричать "что за б..я система"
clickmaker (2008-12-04 15:00:00) [4]> [19] Павел Калугин © (04.12.08 14:54)
так в случае самого первого отлупа ввсе остальные проверки имеют смысл?
если нет, то полный набор проверок будет уж в самом тяжелом случае
Павел Калугин (2008-12-04 14:59:00) [5]вот я и посмотрел бы на один запрос это делающий
по сути можно. тогда это таже ХП получающая тот же наборо данных
то есть алгоритм преображается в
запустили ХП проверки с полным набором данных
получили ответ
проанализировали оный
по результатам запустили ХП денйствие, с полным набором данных
итого набор данных (для ММВБ это 22 или 33 поля) гонялся к серверу 2 раза то есть время одного прогона запрос-ответ явно лишнее.
Павел Калугин (2008-12-04 14:54:00) [6]> [18] clickmaker © (04.12.08 14:41)
точно? ну можно попробовать
проверить есть ли в справочнике счет на бирже с таким классификатором если нет то сообщить об этом
есть ли клиент пользующийся этим счетом если нет то сообщить об этом
есть ли у этого клиента бабло если покупает
есть ли в справочнике бумага с таким классификатором если нет то сообщить
есть ли у клиента нужное количество бумаг, если нет то сообщить
и еще надцать различных проверок По каждой проверке пользователю надо сообщить "чего не хватает"
что в ХП что на клиенте делаем эти надцать запросов и потихоньку клеим строку ошибок
если делаем на клиенте то + время сетевого обмена и + сетевой трафик на каждую проверку
clickmaker (2008-12-04 14:41:00) [7]> итого в первом случае мы по каждой записи гоняем 15-20 конструкций
> запрос-ответ
зачем? можно сразу все проверить
Павел Калугин (2008-12-04 14:39:00) [8]> [15] Ega23 © (04.12.08 14:34)
А это как эти исключения ловить...
Павел Калугин (2008-12-04 14:38:00) [9]> [14] clickmaker © (04.12.08 14:14)
Намного меньшая.
для сравнения при импорте биржевой сделки проверяется наличие и сответствие примерно 15-20 различных параметров
как это выглядит в описанном Олегом виде
1.прочитали строку
провели 15-20 проверок (запрос-ответ)
если все проверки пройдены
то произвели импорт записи
перешли к 1
в моем случае
1.прочитали строку
отдали серверу
если возникли ошибки вернули райзерор
иначе вставили запись
перешли к 1
итого в первом случае мы по каждой записи гоняем 15-20 конструкций запрос-ответ.
Есть подозрение что кроме роста трафика это сильно увеличит время исполнения (именно на сетевой обмен)
Ega23 (2008-12-04 14:34:00) [10]
> а кидать исключения клиенту с сервера - не трафик?
Вот-вот. И потом - по новой хп запускать.
clickmaker (2008-12-04 14:14:00) [11]> Опять же все проверки это гора трафика между клиентом и
> сервером
так уж и гора?
а кидать исключения клиенту с сервера - не трафик?
Павел Калугин (2008-12-04 12:03:00) [12]> [10] Ega23 © (03.12.08 17:29)
ну есть разные пути. То с чем я работаю - вся бизнес-логика в ХП упакована.
Опять же все проверки это гора трафика между клиентом и сервером.
Ega23 (2008-12-04 11:27:00) [13]
> ДО - оно в многопользовательском режиме не всегда помогает.
Я вот как-то однопользовательские режимы и не делал никогда.
ANB (2008-12-04 11:19:00) [14]
> Я, как бы такие вещи ДО момента записи в БД проверяю обычно.
> ..
ДО - оно в многопользовательском режиме не всегда помогает.
Ega23 (2008-12-03 17:29:00) [15]
> когда проверяешь корректность ввода, или целостность данных
> при каком либо расчете.
Я, как бы такие вещи ДО момента записи в БД проверяю обычно...
Павел Калугин (2008-12-03 16:35:00) [16]> [3] Ega23 © (27.11.08 10:52)
Олег, как не встречал? Да на каждом шагу оно, когда проверяешь корректность ввода, или целостность данных при каком либо расчете.
ANB (2008-11-27 16:52:00) [17]
> А нафига ты используешь MS SQL?
Вот с этого и надо начинать :)
GRAND (2008-11-27 16:43:00) [18]
> А нафига ты используешь БДЕ
А нафига ты используешь MS SQL?
Anatoly Podgoretsky (2008-11-27 15:05:00) [19]> alexnmsk (27.11.2008 10:16:00) [0]
А нафига ты используешь БДЕ
Ega23 (2008-11-27 11:30:00) [20]
> ИМХО обычное дело - например при откате транзакции выдать
> клиенту сообщение о неудавшейся операции
Замечательно. Только это всё и без raiserror можно сделать.