创建常规SQL查询构建器

时间:2010-10-27 10:01:07

标签: sql delphi

在delphi中创建“查询”构建器的最佳方法是什么?

我有devexpress量子网格,所以我可以轻松地显示数据。

6 个答案:

答案 0 :(得分:3)

我假设您需要一个查询生成器来将SQL语句组合到数据库而不是Quantum Grid上的过滤器(它本身具有出色的过滤系统。)

我们几年来一直在使用SQLGenerator对象。我们从另一个项目继承了这个对象。虽然它做了它应该做的事情,但我总是要查找一个例子,如果我要创建一个新的声明,对我说明应该简化的事情(至少简化到我的理解水平)

几个想法已通过了讽刺剧。

来自每个SQL关键字的

本身就是一个对象

Node := where.AddNode;
Node.Condition := cndOR
Node.Add(a);
Node.Add(b)

打开添加条件的数组

And([a, Or([b])]);

但今天我可能会将其实现为

SQLBuilder
  .where
    .condition(a)
  .and
    .condition(b)

SQLBuilder对象可能如下所示

  ISQLBuilder = interface
    function select: ISQLBuilder;
    function from: ISQLBuilder;
    function innerJoin: ISQLBuilder;
    function where: ISQLBuilder;

应该可以写

  sqlStatement := SQLBuilder
    .select
      .column('o.name')
      .column('oi.price')
    .from
      .table('orders o')
      .innerjoin('orderitems oi').on('o.orderid').equals('oi.orderid')
    .where
      .condition('oi.price < 100')
      .and.condition('o.name').equals('LatestOrder')
    .Build;

我还在试图弄清楚除了用纯文本写这个语句之外我还买了什么。

答案 1 :(得分:1)

我使用Active Query Builder(http://www.activequerybuilder.com/product_vcl.html)作为用户构建查询的UI。如果您购买源代码,它包括一个匹配Dev Express网格外观的选项。

答案 2 :(得分:0)

这实际上取决于您希望查询构建器的复杂性和直观性。我在Delphi 5中的应用程序中编写了一个便宜又开朗的SQL查询表单,使用的TMemo组件只允许运行Select命令。您可以运行各种SQL查询来从架构上的SQL收集信息,这样您就可以获取数据库中的表和字段,并填充树视图组件或类似的东西。

答案 3 :(得分:0)

为什么在已经准备好编译到您的应用程序中的解决方案时编写自己的?快速报告的人有一个很好的query builder,包括完整的来源。还有open source version,但您必须自己更新以支持Unicode。

答案 4 :(得分:0)

至少在几年前,Delphi的最佳查询构建组件是“简单查询”,这是俄罗斯工具制造商的廉价组件。伟大的组件,功能比最初出现时更深刻和更好的思考。我用它很成功地与QuantumGrid中的数据集成。 (由于Simple Query只生成一个SQL字符串,因此没有太多可以集成的方式。但我也确定了视觉外观,因此看起来与QG一致。)http://devtools.korzh.com/query-builder-delphi/

请注意,Simple Query(及其“Easy Query”.NET组件)的界面旨在使用户能够轻松生成有效的搜索,而无需任何表,联接或SQL的概念。开发人员以一种先见之明的方式完美配置界面,但这是一个很好的功能。也可以作为数据库专家的“全力”解决方案。

另外,我假设你知道QG有自己的集成视觉查询系统。我认为我的主要问题是它主要面向过滤现有数据集,但无论如何简单查询更灵活。

另一件事,简单查询有许多对象用于生成最终的SQL字符串,类似于您发布和询问的代码。这个目的的主要目的只是视觉描述和最终输出之间的中间阶段,如SQL。

答案 5 :(得分:0)

最重要的是了解构造函数对最终用户将具有什么值。通常是数据。您可以为用户建造一堵墙,而他本人将越过墙,或者可以提供方便的楼梯和电梯。高级用户可能需要使用子查询。较不高级的用户将处理QuantiumGrid中内置的过滤器生成器。对于Delphi使用现成的解决方案可能是合理的:Active Query Builder,FastQueryBuilder,Advanced Query Builder。

如果要创建自己的设计,则需要确定三个组件:UI,引擎和元数据。列出每个组件的要求:使用哪些服务器,如何使用参数,如何防止SQL注入等。

用户界面 要为Delphi创建查询生成器,需要了解UI功能。如果用户界面简单,它将在功能方面受到限制。 EasyQuery中使用了这种方法(仅当您具有QuantiumGrid时,才可以从QG中直接使用所有EQ功能)。此外,如果功能被扩展,则UI的复杂性将在几何上呈几何级数增长。

引擎 编写或选择将创建随机表的引擎似乎并不困难。在纸上光滑。在实践中,需要解决许多复杂的任务,例如组织“如何在FROM表达式中正确制作对象,牢记用户创建的所有连接,最重要的是,它对应于Uuser不必考虑如何提出请求,而应严格遵循其指示。另外,一个人不仅应该提出要求,而且要正确。正确编写引擎的任务是控制并轻轻纠正用户

元数据 构造函数不仅可以帮助构建查询,而且可以为用户提供必要的数据以快速构建查询,这非常好。