在运行时更改数据库查询

时间:2013-07-08 17:03:48

标签: delphi filtering delphi-2010 firebird2.5 dbgrid

我正在尝试通过TDBGrid过滤TEdit,处理TEdit onChange事件。 我有TIBQuery列出网格中的所有记录:

SELECT id,obra,cliente,fecha,nro_estudio,sondeo FROM proyecto;

当用户在TEdit中插入字符时,网格必须由Cliente字段刷新。

我的代码尝试执行此操作,但是当它执行处理程序时,查询返回一个空的结果集。我正在使用Firebird 2.5和IB组件。

相关守则:

query := Self.qryTodos;
query.Close();
query.SQL.Clear();
query.SQL.Add('SELECT id,obra,cliente,fecha,nro_estudio,sondeo FROM proyecto WHERE cliente LIKE :Cliente');
query.ParamByName('Cliente').AsString := QuotedStr('%'+Self.busqueda.Text+'%');
query.Open();
DMConnect.Transaction.Commit();

2 个答案:

答案 0 :(得分:2)

当您提供字符串参数时,您不需要QuotedStr。通过使用它,你使它不再匹配(例如“String”变为'''%String%''')

答案 1 :(得分:0)

如果您将搜索字词包含在%中,我会使用包含子句,因此您可以编写如下查询:

query := Self.qryTodos;
query.Close();
query.SQL.Clear();
query.SQL.Add('SELECT id,obra,cliente,fecha,nro_estudio,sondeo FROM proyecto WHERE cliente CONTAINING :Cliente');
query.ParamByName('Cliente').AsString := Self.busqueda.Text;
query.Open();

并删除提交语句,如@LightBulb所述。如果您想出于任何原因在搜索字词中包含%,这将有效。

相关问题