【问题标题】:Using dblookupcombox for filtering使用 dblookupcombox 进行过滤
【发布时间】:2019-08-07 17:36:35
【问题描述】:

我正在使用此代码通过 dblookupCombobox 过滤我的表:

ADOTable1.Filtered:=False;
ADOTable1.Filter:='Section=' + ADOTable2.FieldByName('Section').AsString;
ADOTable1.Filtered:=True;

但它引发了这个异常:

参数的类型错误,超出了允许的范围。

请问哪里有问题?

【问题讨论】:

  • Filtered设置为True时ADOTable1.Filter的值是多少,ADOTable1的DDL定义是什么?如果您执行 `ADOTable1.Filter := 'Section=' + QuotedStr(ADOTable2.FieldByName('Section').AsString) ,您还会收到错误吗?
  • @MartynA 谢谢你,它有效,我只是添加 +QuotedStr,非常感谢......
  • 好。我已经发布了我所说的作为答案,并解释了问题所在。当您有时间时,请通过单击左侧的“勾选”图标“接受”答案 - 这样,未来的读者就会知道它回答了您的问题。

标签: delphi delphi-7 delphi-2010


【解决方案1】:

你遇到的问题是因为这个:

假设 AdoTable2.FieldByName('Section').AsString 的值为SomeValue。然后,您分配给 AdoTable1.Filter 的值是

Section = SomeValue

AdoTable1 尝试将 SomeValue 解释为字段名称,但这失败了,因为 AdoTable1 没有该名称的字段。

要解决此问题,您只需将过滤器表达式中的 SomeValue 用引号括起来。 Delphi 有一个实用函数 QuotedStr 会为你做这件事(并正确处理传递给它的字符串包含嵌入引号的情况(例如,值是像 O'Brien' 这样的名称)。

因此,将您当前分配的过滤器替换为:

ADOTable1.Filter := 'Section=' + QuotedStr(ADOTable2.FieldByName('Section').AsString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-08
    • 2011-05-25
    • 2011-08-25
    • 2012-07-25
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多