rezki_z Ответов: 1

Проблема фильтрации запросов Ado в delphi


Привет у меня есть этот код он отлично работает когда я ищу число внутри столбца
Мне нужен один и тот же код, когда я ищу имя в столбце и дату внутри другого столбца.
<pre lang="Delphi">
procedure TForm1.sEdit1Change(Sender: TObject);
 var a :integer;
begin
IF sEdit1.Text <> '' then
begin
a:=strtoint(sEdit1.Text);
adoquery1.active:=false;
adoquery1.sql.clear;
ADOQuery1.SQL.Add('select * from employé where num_emp='+inttostr(a));
adoquery1.open;
end
else
begin
adoquery1.active:=false;
adoquery1.sql.clear;
ADOQuery1.SQL.Add('select * from employé');
adoquery1.open;
end;
 end;   


Что я уже пробовал:

Изменение кода на строку и дату

Herman&lt;T&gt;.Instance

T-SQL, где предложение имеет и опцию!

1 Ответов

Рейтинг:
2

Jochen Arndt

Вы просто должны знать о синтаксисе SQL. Как уже упоминалось digimanus вы можете использовать AND внутри WHERE статьи.

Но вы должны использовать параметризованные запросы, чтобы избежать этого SQL-инъекция - Википедия[^] когда данные были введены пользователями. Они также позволяют передавать данные по значению вместо строки, что особенно полезно для дат (без проблем преобразования) и значений с плавающей запятой (без ошибок округления).

Непроверенный пример:

var
    Param : TParameter;
{ ... }

ADOQuery1.SQL.Add('SELECT * FROM employé WHERE name_column = :Name AND date_column = :Date');
Param := ADOQuery1.Parameters.ParamByName('Name');
Param.DataType := ftString;
Param.Value := varName;
Param := ADOQuery1.Parameters.ParamByName('Date');
Param.DataType := ftDate;
Param.Value := varDate;

Соответствующие ссылки:
ADOQuery (Delphi) - примеры кода RAD Studio[^]
TADOQuery.свойства параметров[^]

Читайте также о синтаксисе SQL используемого компонента database engine. Хотя основной синтаксис один и тот же, есть некоторые различия, например, для цитирования имен идентификаторов, которые должны быть сделаны, когда такие идентификаторы являются зарезервированными словами. Вы должны сделать это также, если у вас есть дата-время в базе данных и вы хотите сопоставить дату без времени. Каждый компонент database engine имеет различные команды для получения части даты datetime для сравнения.