Delphi sql поиск с обеими колонками

Когда я пытаюсь найти оба столбца, нет фильтра. Я хочу перечислить 5 и 30.05.2016 в dbgrid.

adoquery1.Close;
adoquery1.SQL.CLEAR;
adoquery1.SQL.Add('select * FROM Sheet11 ');
adoquery1.SQL.Add('where field9 like :blm and field12 like :blm1');
adoquery1.Parameters.ParamByName('blm').Value:='5';
adoquery1.Parameters.ParamByName('blm1').Value:='30.05.2016';
adoquery1.Open;

2 ответа

Так в чем же вопрос? Правильно использовать параметры, лучше не использовать сращивание строк из-за всевозможной хрупкости и неожиданных побочных эффектов - http://bobby-tables.com/

И используйте правильные типы данных!

adoquery1.SQL.Text := 'select * FROM Sheet11 ' +
                      'where ( field9 = :_p_field9 ) ' + 
                      '  and ( field12 = :_p_field12 )';
with adoquery1.Parameters do begin
   ParamByName('_p_field9').AsInteger := 5;
   ParamByName('_p_field12').AsDateTime := EncodeDate( 2016, 05, 30 );
end;
adoquery1.Open;

У вас довольно серьезная ошибка SQL. LIKE не работает для любых типов, кроме строк (CHAR, VARCHAR и т. д.). Это не работает для чисел или дат. Ты ищешь = вместо этого, для точных совпадений, или BETWEEN если вы хотите что-то между двумя значениями.

Это должно работать для вас:

  adoquery1.Close;
  adoquery1.SQL.CLEAR;
  adoquery1.SQL.Add('select * FROM Sheet11 ');
  adoquery1.SQL.Add('where field9 = :blm and field12 = :blm1');
  adoquery1.Parameters.ParamByName('blm').Value:= 5; // Notice no quotes
  adoquery1.Parameters.ParamByName('blm1').Value:= '2016-05-30'; // Note no extra quotes
  adoquery1.Open;
Другие вопросы по тегам