Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос с кучей условий 
:(
    Опции темы
delphi_
Дата 25.12.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



есть запрос,берущий условия запроса из кучи edit.text`ов

Код

ADOQuery5.SQL.text:='SELECT * from  Радиодетали where Пасп_Номер='+edit1.text+
  ' and Код_Наименование='+Edit2.text+
  ' and Код_Страны_Произв='+Edit3.text+
  ' and Код_Фирмы_Произв='+Edit4.text+
  ' and Макс_Темп='+Edit5.text+
  ' and Мин_Темп='+edit6.text+
  ' and Макс_Напр='+edit7.text+
  ' and Мин_Напр='+edit8.text+
  ' and Тип_Напряжения='+edit9.text+
  ' and Напряжение='+edit10.text+
  ' and Электроемкость='+edit11.text+
  ' and Сопротивление='+edit12.text;
 ADOQuery5.Open;


Проблема заключаеться в том,что если какое либо поле не заполнить-то аксесс ругаеться на отсутсвие одного  из параметров поиска..
Пробовал сделать так-

Код

if trim(edit1.text) = emptystr then переменная='';


тогда он тоже ругаеться...звездочка там тоже не катит,ибо он тогда будит искать звездочки в таблице

и так-
Код

if trim(edit5.text) <> emptystr then
ADOQuery5.SQL.Add('Макс_Темп=' + edit6.text + ' and ')
else ADOQuery5.SQL.Add('');

тогда он просто каждый раз делает текст запроса ЗАНОВО...


Вопрос-что же сделать с запрос или кодом,чтобы он игнорировал не заполненные эдиты?










PM MAIL   Вверх
ТоляМБА
Дата 26.12.2006, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Цитата(delphi_ @  25.12.2006,  21:52 Найти цитируемый пост)
else ADOQuery5.SQL.Add('');
 Вот это убери - зачем пустые строки плодить?
Цитата(delphi_ @  25.12.2006,  21:52 Найти цитируемый пост)
ADOQuery5.SQL.Add('Макс_Темп=' + edit6.text + ' and ')
 Если это будет последней строкой, то "and" просто сгенерирует ошибку. Пиши так:
Цитата(delphi_ @  25.12.2006,  21:52 Найти цитируемый пост)
ADOQuery5.SQL.Add(' and Мин_Темп='+edit6.text);

Тут можно посоветовать чтобы много строчек не писать - проходит циклом все Edit компоненты и передавать через массив в запрос. ИМХО.
PM   Вверх
kobra
Дата 26.12.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Код

ADOQuery5.SQL.text:='SELECT * from  Радиодетали where 1=1'
if trim(edit5.text) <> emptystr then
  ADOQuery5.SQL.Add('and Макс_Темп=' + edit6.text)
...


PM MAIL   Вверх
Akella
Дата 26.12.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



тебе нужно логически самому строить условия, например

Код

Condition :string;
begin

Condition := #13#10+'where ';
if edit1.text <> '' then Condition := Condition + #13#10+'and pole1 = '+edit1.text;
if edit2.text <> '' then Condition := Condition + #13#10+'and pole2 = '+edit2.text;
...

ну в таком стиле....
и ещё нужно определять нужно ли вообще where
PM MAIL   Вверх
delphi_
Дата 26.12.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 30.11.2006

Репутация: нет
Всего: -1



гм
Код

Condition := #13#10+'SELECT FROM Радиодетали WHERE ';
if edit1.text <> '' then Condition := Condition + #13#10+'Пасп_Номер = '+edit1.text;
if edit2.text <> '' then Condition := Condition + #13#10+'and Код_Наименование = '+edit2.text;
if edit3.text <> '' then Condition := Condition + #13#10+'and Код_Страны_Произв = '+edit3.text;
if edit4.text <> '' then Condition := Condition + #13#10+'and Код_Фирмы_Произв = '+edit4.text;
if edit5.text <> '' then Condition := Condition + #13#10+'and Макс_Темп = '+edit5.text;
if edit6.text <> '' then Condition := Condition + #13#10+'and Мин_Темп = '+edit6.text;
if edit7.text <> '' then Condition := Condition + #13#10+'and Макс_Напр = '+edit7.text;
if edit8.text <> '' then Condition := Condition + #13#10+'and Мин_Напр = '+edit8.text;
if edit9.text <> '' then Condition := Condition + #13#10+'and Тип_Напряжения = '+edit9.text;
if edit10.text <> '' then Condition := Condition + #13#10+'and Напряжение = '+edit10.text;
if edit11.text <> '' then Condition := Condition + #13#10+'and Электроемкость = '+edit11.text;
if edit12.text <> '' then Condition := Condition + #13#10+'and Сопротивление = '+edit12.text;

Ошибка синтаксиса в предложении WHERE..

Это сообщение отредактировал(а) delphi_ - 26.12.2006, 12:59
PM MAIL   Вверх
Vas
Дата 26.12.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Если Edit1.Text='' то после WHERE у тебя будет идти слово AND естественно синтаксис будет неправильным.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 26.12.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(delphi_ @  26.12.2006,  12:44 Найти цитируемый пост)
Ошибка синтаксиса в предложении WHERE..

я тебе просто показал пример, принцип так сказать, а дальше сам работай головой
PM MAIL   Вверх
kobra
Дата 26.12.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(kobra @  26.12.2006,  08:14 Найти цитируемый пост)
where 1=1
вот это и спасает от лишнего and

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.