Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Фильтрация данных  [new]
maxseo
Member

Откуда:
Сообщений: 52
Добрый день!

Есть БД Access (Клиент, Модель холодильников, Кол-во)

Клиент, модель, кол-во вносит в БД:
  Form11.AddTotalOrder.SQL.Clear;
  Form11.AddTotalOrder.SQL.Add('INSERT INTO Order (Data, Client, Model, Quantity)');
  Form11.AddTotalOrder.SQL.Add(' VALUES (:Data, :Client, :Model, :Quantity)');

  Form11.AddTotalOrder.Parameters.ParamByName('Data').Value := (Form11.Label2.Caption); // - тут дата
  Form11.AddTotalOrder.Parameters.ParamByName('Client').Value := (Form11.DBLookupComboBox1.KeyValue); // - тут клиент
  Form11.AddTotalOrder.Parameters.ParamByName('Model').Value := (Form11.DBLookupComboBox2.KeyValue); // - тут модель
  Form11.AddTotalOrder.Parameters.ParamByName('Quantity').Value := (Form11.Edit1.Text); // - тут кол-во
  Form11.AddTotalOrder.ExecSQL;

Получилось

IdDataClientModelQuantity
102.10.2017LGLGM300S123
202.10.2017LGLGM300S+123
302.10.2017LGLGM300SH123
402.10.2017LG M400S123
502.10.2017LG M400S+321
602.10.2017LG M400SH111


В отдельной форме делаю вывод данных (фильтр) DBLookupComboBox1 - выбираю клиента, например - LGLG, в DBLookupComboBox2 - список доступных для данного клиента моделей их 3 согласно базе. Вроде все как бы ок, только вот если я выбираю в DBLookupComboBox1 - LG?, то в DBLookupComboBox2 - появляются сразу все 6 моделей. Понимаю, что это из-за того что LGLG содержит LG.

Вот сам фильтр:

/////////////////// F I L T E R   C L I E N T -> M O D E L//////////////////////
procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
  if Form1.DBLookupComboBox1.KeyValue = ' ' then
   begin
      Form1.ADOModel.Filtered := FALSE;
    end
  else
    begin
      Form1.ADOModel.Filter := '[Client] like '+QuotedStr('%'+Form1.DBLookupComboBox16.KeyValue+'%');
{      Form1.ADOModel.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';}
      Form1.ADOModel.Filtered := TRUE;

    end;

end;

то что за комментировано, это я пробовал несколько вариантов.

Просьба подсказать, как можно решить данную проблему.
2 окт 17, 21:39    [20837472]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
Dmitri Krizhanovski
Member

Откуда:
Сообщений: 465
maxseo,

А если без "%"?
2 окт 17, 22:18    [20837545]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
maxseo
Member

Откуда:
Сообщений: 52
Dmitri Krizhanovski,

+QuotedStr('%'+Form1.DBLookupComboBox16.KeyValue+'%') - такой вариант вроде как обязательный
2 окт 17, 22:24    [20837560]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
Dmitri Krizhanovski
Member

Откуда:
Сообщений: 465
maxseo,

т.е. ты даже не попробовал :)

Если у тебя в Form1.DBLookupComboBox16.KeyValue содержиться Client, то фильтр должен быть строго на равенство:
Form1.ADOModel.Filtered := False;
'Client=' + QuotedStr(Form1.DBLookupComboBox16.KeyValue);
Form1.ADOModel.Filtered := True;

+ А здесь у тебя ошибки нет?
procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
  if Form1.DBLookupComboBox1.KeyValue = ' ' then
  begin
    Form1.ADOModel.Filtered := FALSE;
  end
  else
  begin
    Form1.ADOModel.Filter := '[Client] like '+QuotedStr('%'+Form1.DBLookupComboBox16.KeyValue+'%');
    { Form1.ADOModel.Filter := 'Client like %'+Form1.DBLookupComboBox16.KeyValue+'%';}
    Form1.ADOModel.Filtered := TRUE;
  end;
end;

end;
2 окт 17, 23:56    [20837686]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
maxseo
Member

Откуда:
Сообщений: 52
Dmitri Krizhanovski,

Да спасибо Вы правы все работает, вчера не было возможности проверить.
Может Вы подскажите, для ликбеза, а для чего используется символ % в - Form1.ADOModel.Filter := '[Client] like '+QuotedStr('%'+Form1.DBLookupComboBox16.KeyValue+'%'); ?
3 окт 17, 06:42    [20837800]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
egor555
Member

Откуда:
Сообщений: 1
maxseo, % - это любые символы в SQL
3 окт 17, 15:02    [20839196]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация данных  [new]
maxseo
Member

Откуда:
Сообщений: 52
egor555,

Спасибо за объяснение!
3 окт 17, 18:45    [20840041]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить