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

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

Как проверить текст SQL-запроса? [MSSQL]


Страницы:   1 2

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 не подойдет?


Страницы:   1 2

Наверх

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