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;