带有列表框项的delphi adoquery过滤器

时间:2015-10-14 07:17:20

标签: sql-server delphi filter listbox

这是最终的,但已经不是过滤器了 任何人都知道我的过滤器问题

begin
adoquery1.SQL.CLEAR;
adoquery1.SQL.Add('select * FROM gunsonu ');
adoquery1.SQL.Add('where TARIH like :TRH');
adoquery1.Parameters.ParamByName('TRH').Value:=(PlannerDatePicker1.text);

for i := 0 to form3.ListBox1.Items.Count-1 do
adoquery1.SQL.Add(' and VLIM <> '+QuotedStr(form3.ListBox1.items[i]));
end;
adoquery1.Open;
frxReport1.ShowReport(true);

1 个答案:

答案 0 :(得分:1)

从Delphi应用程序对MS Sql Server设置查询的最佳方法是不要在构建查询的应用程序中修改代码,直到运行它返回您希望的结果。 Delphi快速编译/运行周期的一个问题是它鼓励尝试和错误,即 无法取代让事情正常运作。

将SQL构造任务与编码任务分开最好有两个原因:

  1. Sql Server客户端实用程序(例如Sql Server Management Studio或旧的ISql / W&#34;查询分析器&#34;)是用于Sql构建任务的更好工具,他们可以访问服务器的执行计划,分析器等。但是,如果你没有其中一个可用,多年来,Delphi已经包含了某种类型的数据资源管理器&#34;用于对各种服务器运行查询的实用程序 - 在最近的XE版本中,IDE菜单中的FireDac | Explorer下有一个Firedac。

  2. 使用其中一个工具,您可以在您面前的屏幕上找到实际发送到服务器的Sql查询。尝试在Delphi代码中设置Sql时经常出现错误,特别是对于初学者来说,发送到服务器的Sql查询并不一定是您所认为的。根据SO中出现的qs中的示例来判断,它们经常会出现句法或语义错误,特别是当Sql应该包含引号时(Delphi IDE的监视和评估窗口不会出现这种情况)。提供一个很好的形式来查看Sql)。在Sql查询工具中创建查询,您将有机会查看查询的确切内容,并从工具中获取有关语法错误的反馈等。

  3. 使用这些工具更轻松地尝试参数化查询的最佳方式。

  4. 3点是什么?嗯,有一件事是参数化查询通常比服务器更好地优化,但不可否认的是,并非所有查询都可以用参数化形式表示(例如,您不能参数化哪个列或表,而不是特定的查询。重新询问)。另一件事是它有助于最大限度地减少您对Sql-Injection的影响(参见https://en.wikipedia.org/wiki/SQL_injection)。

    一旦你的查询工作正如你在上面那样的客户端Sql工具中所期望的那样是时候编写代码来从你的Delphi应用程序执行它,而不是之前。