Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Microsoft SQL Server и RAISERROR [D7, MSSQL]


Страницы:   1 2

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 можно сделать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо