![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как проверить текст SQL-запроса? [MSSQL]
kserg@ukr.net © (2002-04-12 10:35:00)Привет.
В приложении есть раб.форма содержащая рабочий НД. Из раб.формы юзер вызывает поисковую форму, в котр. он может "наварачивать" условие сложного запроса.
Понятно, что всех тонкостей условия учесть невозможно, поэтому перед тем как выполнить данный запрос и получить раб.НД хочу его протестировать на предмет корректности синтаксиса на времен.запросе. Делаю это так:
Try
Temp1.Open
except
MessageDlg("Условие запроса содержит ошибку",MtError,[mbOk],0);
exit;
end;
И далее, если тест пройден, тогда формирую Main.SQL.Text и открываю его. Но здесь возникает проблемка: получается, что если запрос корректный, то я его дважды открываю...
Но с др.стороны: сразу "лепить" запрос в основной SQL не хочется, т.к. в случае ошибки придется восстанавливать предыдущ.текст SQL и переоктрывать его...
Как можно еще протестить SQLзапрос ?
Johnmen (2002-04-12 12:58:00) [1]Я удивлен !
1. Если человеку надоело, значит и не очень было нужно
2. О каком "гонянии" НД может идти речь, если он не выполнен !!!???
kserg@ukr.net (2002-04-12 12:47:00) [2]Всё. Отбой. Надоело.
>Temp1.Open должно быть в try
Я ж искал решение, как протестить условие, чтоб не гонять набор данных, а мне снова - делай OPEN.
Всем спасибо за участие.
Johnmen (2002-04-12 12:44:00) [3]Схема не срабатывает, т.к. Temp1.Open должно быть в try
Johnmen (2002-04-12 12:42:00) [4]Я с ADO не работаю и его особенностей не знаю.
И почему не устраивает вариант Johnmen © (12.04.02 10:58) ?
Alexandr (2002-04-12 12:38:00) [5]значит надо глубже в ADO смотреть. Где-то все-равно должен быть.
kserg@ukr.net (2002-04-12 12:37:00) [6]2Johnmen © (12.04.02 12:20)
я понял из хэлпа, что ADO в отличии от Query "препарирует" запрос автоматически, поэтому и метод это отсутсвует.
Но почему не срабатывет схема - будь уж добр объясни...
Johnmen (2002-04-12 12:20:00) [7]Согласен ! Но если бы ты почитал хелп, то понял бы значение свойства Prepared !
kserg@ukr.net (2002-04-12 12:12:00) [8]Johnmen © (12.04.02 12:07)
Уважаемый, у ADOQuiry нету метода Prepare.
2Alexandr © (12.04.02 12:09)
не бурчи... ну понимаш, все люди разные - может я медленно доганяю.
Alexandr (2002-04-12 12:09:00) [9]вот так объясняешь, объясняешь человеку, а он все равно по своему делает, да еще и обижается на советовавших, что ему не то подсказали
Johnmen (2002-04-12 12:07:00) [10]Temp1.Prepare;
kserg@ukr.net (2002-04-12 12:03:00) [11]Ещё уточнение (возможно и несущественное) : работаю через ADOQuiry.
Переделал вышеуказ.код
Try
Temp1.Prepared:= true;
except
MessageDlg("Условие запроса содержит ошибку",MtError,[mbOk],0);
exit;
end;
Для проверки формирую заведомо ошибочное условие,
но except не наступает???
А ошибку выкидывает сам сервер!!!
Получается запрос благополучно проходит компиляцию и...
Вопрос: что-то я не так делаю
Johnmen (2002-04-12 11:18:00) [12]>kserg@ukr.net : Prepare - компиляция текста запроса...
>Lusha © : Спасибо, Андрей, получил почту !
kserg@ukr.net (2002-04-12 11:15:00) [13]Народ, я правильно вас понял - Prepared можно рассматривать как аналог Open только без выполнения запроса?
(ранее я считал этот метод для использования параметризирован.запросов, где его успешно и применял...)
Lusha (2002-04-12 11:12:00) [14]Корректности синтаксиса? Да... А с точки зрения логичности - это проблема пользователя. :)
kserg@ukr.net (2002-04-12 11:10:00) [15]2Lusha © (12.04.02 11:03)
а что твой компонент дает 100%-гарантию корректности запроса?
(намекаю, что и проверять не требовалось)
Lusha (2002-04-12 11:03:00) [16]В свое время столкнулся с аналогичной проблемой... Пошел другим путем и написал компонент, позволяющий пользователю формировать условия выбора набором предложений на родном языке... Назвал его TQueryBuilder... :)
При этом результатом работы будет готовый SQL запрос...
Johnmen (2002-04-12 10:58:00) [17]С моей точки зрения, наиболее рационально использовать один единственный запрос и в try .... а перед этим сохранить в переменной его текст, чтобы потом восстановить.
И не делать никаких лишних телодвижений, типа >...- добавляю опред.условие, котр.однозначно нет в БД ...
Alexandr (2002-04-12 10:55:00) [18]тебе же сказали prepare и фиктивного условия не надо.
kserg@ukr.net (2002-04-12 10:50:00) [19]Ещё забыл добавить: т.к. запрос юзера может возвращать большой кол-во записей, то перед тестом я сам текст запроса модифицирую
- добавляю опред.условие, котр.однозначно нет в БД (типа делаю запрос фиктивным, лишь бы синтаксис протестить).
Понятно, что в раб.НД уже подставляю раб.условие.
SVM (2002-04-12 10:38:00) [20]Prepare не подойдет?