Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2015, 23:18   #11
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
where (:sklad_id = -1 or sklad_id = :sklad_id ) and (:cat = -1 or cat = :cat)
это если по простому
come-on вне форума Ответить с цитированием
Старый 01.12.2015, 11:15   #12
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
это если по простому
вы меня не правильно поняли. это я и сам знаю как отфильтровывать с помощью where, я спрашиваю как мне составить запрос таким образом чтоб он зависил от выбранных значений lookupcombobox? при этом содержится значение "все склады" имеющей EditValue = -1 тоесть если
cbsklad.EditValue = -1
то
Код:
select * from get_ostatok
так же имеется второй CB2 в котором выбираются группы оборудования
если выбран 1 склад и например 1 группа то запрос должен быть таким
Код:
select * from get_ostatok where (sklad_id = 1) and (cat = 1)
а если только 1 склад а категория не выбрана (CB2.EditValue = -1)
то только так
Код:
select * from get_ostatok where (sklad_id = 1)
, а если только категория выбрана а склад не выбран
select * from get_ostatok where (cat = 1)
а если у меня 3 ComboBox? мне нужно проверить
if cb1.editvalue = -1 then
то запрос 1
if (cb1.editvalue = -1) and (cb2.editvalue = -1) then
то запрос 2
if if cb1.editvalue <> -1 then
то запрос 3
if cb2.editvalue <> -1 then
то запрос 4
Antony41 вне форума Ответить с цитированием
Старый 01.12.2015, 11:27   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Правильно он понял. Параметризированный запрос. Если склад не задан, то параметру значение -1. Аналогично для категории
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.12.2015, 15:06   #14
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
вы меня не правильно поняли.
надо учить sql ели с базами работаете
come-on вне форума Ответить с цитированием
Старый 01.12.2015, 18:58   #15
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
надо учить sql ели с базами работаете
Уж поверьте с фильтрацией where работать я умею

вот результат запроса
Код:
select * from get_ostatok


А вот результат запроса с параметром -1 как вы и говорите
Код:
select * from get_ostatok where get_ostatok.rsklad_id = -1
Antony41 вне форума Ответить с цитированием
Старый 01.12.2015, 19:13   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
select * from get_ostatok where get_ostatok.rsklad_id = -1
И чем это похоже на то, что предлагалось в #11? Ответ - совершенно другое
Цитата:
Уж поверьте с фильтрацией where работать я умею
Как следствие - совершенно не верю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.12.2015, 19:14   #17
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

А по итогу видно что не умеете, печально
И про нулы я вам еще в предыдущей теме писал
http://programmersforum.ru/showthread.php?t=285642
2 раза ...
Надо учить, неучение тьма.
come-on вне форума Ответить с цитированием
Старый 01.12.2015, 19:18   #18
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

в общем проблему я решил по другому с помощью фильтра компонента cxGrid, а вобще надо было так https://youtu.be/sA1m-EvADqw
Antony41 вне форума Ответить с цитированием
Старый 01.12.2015, 19:22   #19
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Да не надо нам эти картинки, мы и без xxxGrid-ов это делаем просто и без напряга, потому что sql учили.
come-on вне форума Ответить с цитированием
Старый 01.12.2015, 19:47   #20
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

я тоже sql учил, но не доходит до меня как можно реализовать это по другому
вот как я себе это представляю
есть у меня некий файл SQL.xml в котором я храню все запросы

как видите у меня 2 лукапа в первом склады а во втором группы. сделать выборку мне не представляет труда, но сделать её универсальной не пойму как.

вот примерно так я пытался сделать функцию отбора первый раз

Код:
		<GetOstatok>
			<MainSQL>
				select * from get_ostatok
			</MainSQL>
			<SQL1>
				where rsklad_id = :rsklad_id 
			</SQL1>
			<SQL2>
				and requip_group_id = :requip_group_id 
			</SQL2>
		</GetOstatok>
Код:
var
  SQL, MainSQL, SubSQL1, SubSQL2: string;
  Value : string;
begin
  if not DataModule1.IsConnectedDB(True) then
    Exit;
  MainSQL := MainForm.XMLSQL.DocumentElement.ChildNodes['Sklads'].ChildNodes['GetOstatok'].ChildNodes['MainSQL'].Text;
  SubSQL1 := MainForm.XMLSQL.DocumentElement.ChildNodes['Sklads'].ChildNodes['GetOstatok'].ChildNodes['SQL1'].Text;
  SubSQL2 := MainForm.XMLSQL.DocumentElement.ChildNodes['Sklads'].ChildNodes['GetOstatok'].ChildNodes['SQL2'].Text;

  SQL := MainSQL;

  if cxSelectSklads.EditValue <> -1 then
    begin
      SQL := MainSQL + SubSQL1;
      FDQGetOstatok.SQL.Text := SQL;
      FDQGetOstatok.ParamByName('rsklad_id').AsInteger := cxSelectSklads.EditValue;
    end
  else
    SQL := MainSQL;
  FDQGetOstatok.SQL.Text := SQL;
  MainSQL := SQL;

  if cxSelectEquipsGroups.EditValue <> -1 then
    begin
      SQL := MainSQL + SubSQL2;
      FDQGetOstatok.SQL.Text := SQL;
      FDQGetOstatok.ParamByName('requip_group_id').AsInteger := cxSelectEquipsGroups.EditValue;
    end
  else
    SQL := MainSQL;
  FDQGetOstatok.SQL.Text := SQL;


  Caption := IntToStr(cxSelectSklads.EditValue)+'|'+IntToStr(cxSelectEquipsGroups.EditValue);
  try
    FDQGetOstatok.Open;
  except
    on E: Exception do
    begin
      ShowMyMessage(0, C_MSG_LOG, 'Ошибка: '+E.Message);
      ShowMyMessage(0, C_MSG_LOG, 'Запрос при возникновении ошибки: '+sql);
      Exit;
    end;
  end;
ну это так вкратце примерно.
Antony41 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить функцию ВПР для выпадающего списка ОльгаБобылева Microsoft Office Excel 23 18.05.2015 12:12
обработка выпадающего списка Leks123 PHP 2 12.08.2013 23:38
как изменить ширину для выпадающего списка в dbgrid delphi 7 crash_boy Компоненты Delphi 1 06.06.2013 09:53
Настройка выпадающего списка BenderMTB Microsoft Office Excel 1 10.11.2012 10:17
JQuery плагин для замены выпадающего списка (select) Linel JavaScript, Ajax 1 22.06.2011 17:46