Форум: "Базы";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
ВнизКак проверить текст 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c