【问题标题】:Array parameter for TADOQuery in Delphi 2010Delphi 2010 中 TADOQuery 的数组参数
【发布时间】:2012-10-12 12:47:48
【问题描述】:

我需要执行一个简单的查询:

SELECT * FROM MyTable WHERE Id IN (:ids)

显然,它返回给定列表中具有主键“Id”的记录集。如何将整数 ID 数组传递给参数“ids”的 ADOQuery.Parameters?我试过 VarArray - 它不起作用。默认情况下,参数 'ids' 具有 FieldType = ftInteger,如果重要的话。

【问题讨论】:

    标签: sql arrays delphi parameter-passing tadoquery


    【解决方案1】:

    没有可用于将值列表传递给in 的参数类型。不幸的是,这是参数化 SQL 的缺点之一。

    您必须从代码构建查询以生成值列表,或生成随后可以从代码中填充的参数列表。这是因为您可以将每个值作为不同的参数传递,如下所示:

    SELECT * FROM MyTable WHERE Id IN (:id1, :id2, :id3)
    

    但由于列表可能具有可变大小,因此您必须更改 SQL 以添加参数。在这种情况下,生成值列表同样容易,尽管参数化查询可能会被更好地缓存,具体取决于您使用的数据库。

    【讨论】:

      【解决方案2】:

      IN 参数只接受一个逗号分隔的值字符串,例如 (1,2,3,4,5),所以我假设您将数据类型设置为 ftstring 并构建字符串并传递它...?没有尝试过,但这是我尝试...

      【讨论】:

      • 那行不通。常见的陷阱。它需要一个逗号分隔的值列表,但该列表不是(单个)字符串。
      • 好吧,你似乎是对的,一个小时左右我放弃了,似乎没有办法,即使通过我一直在尝试的狡猾手段!话虽如此,对提出建议(我说我没有尝试过)投反对票并落入预先准备好的坑似乎有点苛刻!)
      • 好吧,发布未经尝试的解决方案通常被认为是不礼貌的,尽管我个人不太关心这一点,只要答案指向正确的方向。但在这种情况下,答案是完全错误的,因此正如投票按钮标题所说:“这个答案没有用”。但如果有什么安慰的话:投票也让我付出了代价。 ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多