Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.02.2016, 21:22
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию выборка двух значений из одной колонки

Профи, помогите с запросом .
Суть такая :
Есть таблица , в ней столбцы с данными.
Нужно сделать выборку данных с использованием дат (точнее промежутков между указанными датами).
Как бы проблем нет, но нужно включить в промежутки даты ,выборку двух разных значений в одном столбце.
Столбец FRUKT и указать Яблоко.
Если применить как указал в коде , всё работает.
Как вывести Яблоко и Грушу ?, они находятся в столбце FRUKT
Код:
f.SQL.Add('SELECT DISTINCT * from obstan country');
f.SQL.Add('where ID>0');
f.SQL.Add('and DATE >='+#39+DBDateTimeEditEh1.Text+#39);
f.SQL.Add('and DATE <='+#39+DBDateTimeEditEh2.Text+#39);
f.SQL.Add('and ADD like'+#39+Edit1.Text+#39);
if DBComboBoxEh2.Text<>'' then f.SQL.Add('and ORKIS like'+#39+DBComboBoxEh2.Text+#39);
if DBComboBoxEh4.Text<>'' then f.SQL.Add('and FRUKT like'+#39+DBComboBoxEh4.Text+#39);
if DBComboBoxEh3.Text<>'' then f.SQL.Add('and TYPE like'+#39+DBComboBoxEh3.Text+#39);
if DBComboBoxEh1.Text<>'' then f.SQL.Add('and PRAME like'+#39+DBComboBoxEh1.Text+#39);
f.SQL.Add('order by date, ADRES ');
f.Open;
Добавляю
Код:
if DBComboBoxEh5.Text<>'' then f.SQL.Add('or FRUKT like'+#39+DBComboBoxEh5.Text+#39);
Выбирает и яблоко и грушу , но ломается период DATE.
Получается , выбирает за всё время , а надо строго в промежутках времени , указанных в DBDateTimeEditEh1 и DBDateTimeEditEh2.

Благодарю
Ответить с цитированием
  #2  
Старый 24.02.2016, 22:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Каким образом вы хотите задавать Яблоко и Грушу одновременно в DBComboBoxEh4.Text ?
У вас ведь одно значение за раз в это поле вводится.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
starcon (25.02.2016)
  #3  
Старый 24.02.2016, 23:39
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Все просто DBComboBoxEh4.Text это яблоко, а через DBComboBoxEh5.Text это груша
там же есть оператор or frukt like
Ответить с цитированием
  #4  
Старый 25.02.2016, 11:37
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Каким образом вы хотите задавать Яблоко и Грушу одновременно в DBComboBoxEh4.Text ?
У вас ведь одно значение за раз в это поле вводится.
Добавляю
Код:
Код:
	
if DBComboBoxEh5.Text<>'' then f.SQL.Add('or FRUKT like'+#39+DBComboBoxEh5.Text+#39); 
Выбирает и яблоко и грушу , но ломается период DATE.
Получается , выбирает за всё время , а надо строго в промежутках времени , указанных в DBDateTimeEditEh1 и DBDateTimeEditEh2.

Благодарю
Ответить с цитированием
  #5  
Старый 25.02.2016, 12:38
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А вы возьмите в скобки все ваши фрукты:
Код:
if DBComboBoxEh4.Text<>'' then f.SQL.Add('and (FRUKT like'+#39+DBComboBoxEh4.Text+#39);
if DBComboBoxEh5.Text<>'' then f.SQL.Add('or FRUKT like'+#39+DBComboBoxEh5.Text+#39+')');
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
starcon (25.02.2016)
  #6  
Старый 25.02.2016, 19:56
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Помогло, но при таком запросе нужно обязательно заполнять оба компонента для поиска
DBComboBoxEh4 и DBComboBoxEh5.
То есть, грушу и яблоко , если только по одному критерию запрос ломается

"Не правильный синтаксис около конструкции Груша"

Можно как то решить ?

Последний раз редактировалось starcon, 26.02.2016 в 17:00.
Ответить с цитированием
  #7  
Старый 27.02.2016, 18:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Канеч, ломается. Скобку то хто закрывать бу?
Код:
If (DBComboBoxEh4.Text<>'') Or  (DBComboBoxEh5.Text<>'') Then
begin
  f.SQL.Add('and (');
  if DBComboBoxEh4.Text<>'' then f.SQL.Add('FRUKT like'+#39+DBComboBoxEh4.Text+#39);
  if DBComboBoxEh5.Text<>'' then 
    begin
      if DBComboBoxEh4.Text<>'' then f.SQL.Add('or');
      f.SQL.Add('FRUKT like'+#39+DBComboBoxEh5.Text+#39);
    end;
  f.SQL.Add(')');
end;

как-то так...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
starcon (28.02.2016)
  #8  
Старый 28.02.2016, 14:11
starcon starcon вне форума
Новичок
 
Регистрация: 15.03.2014
Сообщения: 84
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

От СПАСИБО.
Заработало
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter