Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.06;
Скачать: CL | DM;

Вниз

Как проверить текст SQL-запроса?   Найти похожие ветки 

 
kserg@ukr.net   (2002-04-12 10:35) [0]

Привет.
В приложении есть раб.форма содержащая рабочий НД. Из раб.формы юзер вызывает поисковую форму, в котр. он может "наварачивать" условие сложного запроса.
Понятно, что всех тонкостей условия учесть невозможно, поэтому перед тем как выполнить данный запрос и получить раб.НД хочу его протестировать на предмет корректности синтаксиса на времен.запросе. Делаю это так:
Try
Temp1.Open
except
MessageDlg("Условие запроса содержит ошибку",MtError,[mbOk],0);
exit;
end;

И далее, если тест пройден, тогда формирую Main.SQL.Text и открываю его. Но здесь возникает проблемка: получается, что если запрос корректный, то я его дважды открываю...
Но с др.стороны: сразу "лепить" запрос в основной SQL не хочется, т.к. в случае ошибки придется восстанавливать предыдущ.текст SQL и переоктрывать его...

Как можно еще протестить SQLзапрос ?


 
Alexandr ©   (2002-04-12 10:37) [1]

prepare?


 
SVM   (2002-04-12 10:38) [2]

Prepare не подойдет?


 
kserg@ukr.net   (2002-04-12 10:50) [3]

Ещё забыл добавить: т.к. запрос юзера может возвращать большой кол-во записей, то перед тестом я сам текст запроса модифицирую
- добавляю опред.условие, котр.однозначно нет в БД (типа делаю запрос фиктивным, лишь бы синтаксис протестить).
Понятно, что в раб.НД уже подставляю раб.условие.


 
Alexandr ©   (2002-04-12 10:55) [4]

тебе же сказали prepare и фиктивного условия не надо.


 
Johnmen ©   (2002-04-12 10:58) [5]

С моей точки зрения, наиболее рационально использовать один единственный запрос и в try .... а перед этим сохранить в переменной его текст, чтобы потом восстановить.
И не делать никаких лишних телодвижений, типа >...- добавляю опред.условие, котр.однозначно нет в БД ...


 
Lusha ©   (2002-04-12 11:03) [6]

В свое время столкнулся с аналогичной проблемой... Пошел другим путем и написал компонент, позволяющий пользователю формировать условия выбора набором предложений на родном языке... Назвал его TQueryBuilder... :)
При этом результатом работы будет готовый SQL запрос...


 
kserg@ukr.net   (2002-04-12 11:10) [7]

2Lusha © (12.04.02 11:03)
а что твой компонент дает 100%-гарантию корректности запроса?
(намекаю, что и проверять не требовалось)


 
Lusha ©   (2002-04-12 11:12) [8]

Корректности синтаксиса? Да... А с точки зрения логичности - это проблема пользователя. :)



 
kserg@ukr.net   (2002-04-12 11:15) [9]

Народ, я правильно вас понял - Prepared можно рассматривать как аналог Open только без выполнения запроса?
(ранее я считал этот метод для использования параметризирован.запросов, где его успешно и применял...)


 
Johnmen ©   (2002-04-12 11:18) [10]

>kserg@ukr.net : Prepare - компиляция текста запроса...
>Lusha © : Спасибо, Андрей, получил почту !


 
kserg@ukr.net   (2002-04-12 12:03) [11]

Ещё уточнение (возможно и несущественное) : работаю через ADOQuiry.
Переделал вышеуказ.код

Try
Temp1.Prepared:= true;
except
MessageDlg("Условие запроса содержит ошибку",MtError,[mbOk],0);
exit;
end;


Для проверки формирую заведомо ошибочное условие,
но except не наступает???
А ошибку выкидывает сам сервер!!!
Получается запрос благополучно проходит компиляцию и...
Вопрос: что-то я не так делаю


 
Johnmen ©   (2002-04-12 12:07) [12]

Temp1.Prepare;


 
Alexandr ©   (2002-04-12 12:09) [13]

вот так объясняешь, объясняешь человеку, а он все равно по своему делает, да еще и обижается на советовавших, что ему не то подсказали


 
kserg@ukr.net   (2002-04-12 12:12) [14]

Johnmen © (12.04.02 12:07)
Уважаемый, у ADOQuiry нету метода Prepare.

2Alexandr © (12.04.02 12:09)
не бурчи... ну понимаш, все люди разные - может я медленно доганяю.


 
Johnmen ©   (2002-04-12 12:20) [15]

Согласен ! Но если бы ты почитал хелп, то понял бы значение свойства Prepared !


 
kserg@ukr.net   (2002-04-12 12:37) [16]

2Johnmen © (12.04.02 12:20)
я понял из хэлпа, что ADO в отличии от Query "препарирует" запрос автоматически, поэтому и метод это отсутсвует.
Но почему не срабатывет схема - будь уж добр объясни...


 
Alexandr ©   (2002-04-12 12:38) [17]

значит надо глубже в ADO смотреть. Где-то все-равно должен быть.


 
Johnmen ©   (2002-04-12 12:42) [18]

Я с ADO не работаю и его особенностей не знаю.
И почему не устраивает вариант Johnmen © (12.04.02 10:58) ?


 
Johnmen ©   (2002-04-12 12:44) [19]

Схема не срабатывает, т.к. Temp1.Open должно быть в try


 
kserg@ukr.net   (2002-04-12 12:47) [20]

Всё. Отбой. Надоело.

>Temp1.Open должно быть в try
Я ж искал решение, как протестить условие, чтоб не гонять набор данных, а мне снова - делай OPEN.

Всем спасибо за участие.


 
Johnmen ©   (2002-04-12 12:58) [21]

Я удивлен !
1. Если человеку надоело, значит и не очень было нужно
2. О каком "гонянии" НД может идти речь, если он не выполнен !!!???



Страницы: 1 вся ветка

Текущий архив: 2002.05.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
1-17562
Vint
2002-04-17 22:10
2002.05.06
Редактор компонент...


1-17588
Maxim Homutov
2002-04-22 16:27
2002.05.06
SPL


1-17594
Varg
2002-04-22 16:09
2002.05.06
Как эмулировать окончание сеанса Windows?


14-17668
VictorT
2002-02-20 16:47
2002.05.06
Игрушка для програмиста


1-17635
Timon
2002-04-23 11:27
2002.05.06
Интересный вопрос