Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-17486
Matr
2002-04-12 13:54
2002.05.06
положение горизонтального бегунка DBGrid


1-17577
KIR
2002-04-19 09:52
2002.05.06
Округление типа Extended


4-17724
REL_
2002-03-01 14:17
2002.05.06
Сообщения


1-17629
Ptushenko Denis
2002-04-23 07:54
2002.05.06
Где можно взять компанент DirectX для Delphi6 ?


3-17509
Ник
2002-04-11 21:34
2002.05.06
Grid с автоматическим выравниванием ширины столбцов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский