【问题标题】:Combo box does not return correct results组合框不返回正确的结果
【发布时间】:2016-10-26 07:38:44
【问题描述】:

我的组合框的以下行源显示正确的结果,除非客户端(这是到 tblClient 的链接)为 661。在所有其他情况下,它会给出正确的结果。 661 是 tblClient 的 PK。在这种情况下,该字段是空白的,但它确实具有 tblReceipts 的正确 PK。我知道这一点是因为将组合框链接到 frmreceipts 的命令按钮可以正常工作。我对我的数据进行了三次检查,并将行源链接到访问查询,而不是纯 SQL。 'Access Query 返回正确的数据,让我猜测问题不在于 SQL,而在于表单或组合框中。重要的是,客户端 661 的功能与所有其他客户端相同,除了这一方面。如果一切都失败了,我将创建一个单独的命令按钮来执行涉及 661 时所需的操作。非常希思·罗宾逊,我知道。

SELECT tblReceipts.ID, tblClient.ClientID, tblClient.ClientName, tblReceipts.DateRec, tblReceipts.Type, tblReceipts.Amount, tblReceipts.SerialNo
FROM tblReceipts INNER JOIN tblClient ON tblReceipts.ClientLookup = tblClient.ClientID
WHERE (((tblClient.ClientID)=IIf([Forms]![frmDisclosure]![Client]=661,417,[Forms]![frmDisclosure]![Client])))
ORDER BY tblClient.ClientName, tblReceipts.DateRec DESC;

更多信息:我的组合框的列数是 7,第一个是客户端的 PK。列宽通常为零,但如果我将其设为 1 厘米,客户端 661 会正确显示 PK 417。当然,对于大多数记录来说并不令人满意,但很有趣。

【问题讨论】:

  • 接受编辑,但“客户”在我的表单上作为 tblClient 的链接。看不到如何编辑我的问题:“访问查询”返回正确的结果,所以问题可能出在表单或组合框上。
  • 什么是 frmDisclosure 的 RecordSource?
  • 什么类型的字段是 [Forms]![frmDisclosure]![Client] 并且链接到其记录源中的查询或 sql。客户端更新时可以调试.print [Forms]![frmDisclosure]![Client] (After_Update)
  • [Forms]![frmDisclosure]![Client] 是数字 - 长整数。这是一个连接到 tblClient 的查找字段。请原谅我缺乏专家,但你能帮我调试.print [Forms]![frmDisclosure]![Client] 当客户端更新(After_Update)时。组合框中没有事件。
  • frmDisclosure 是单一表格吗? WHERE 子句中的 IIf 有点不寻常,也许您需要在 Form_Current 事件中添加一个 Combobox.Requery 才能使其工作。

标签: ms-access vba


【解决方案1】:

.. 我的组合框显示正确的结果,除非 Client ... 是 661

好吧,你用 417 代替 661,所以你永远不会收到 661 的数据,你应该仔细检查 417 的数据。

尝试运行此程序以检索 417 的数据:

SELECT tblReceipts.ID, tblClient.ClientID, tblClient.ClientName, tblReceipts.DateRec, tblReceipts.Type, tblReceipts.Amount, tblReceipts.SerialNo
FROM tblReceipts INNER JOIN tblClient ON tblReceipts.ClientLookup = tblClient.ClientID
WHERE (tblClient.ClientID=417)
ORDER BY tblClient.ClientName, tblReceipts.DateRec DESC;

尝试显示当前的ClientID:

SELECT 
    tblReceipts.ID, 
    tblClient.ClientID, 
    tblClient.ClientName, 
    tblReceipts.DateRec, 
    tblReceipts.Type, 
    tblReceipts.Amount, 
    tblReceipts.SerialNo,
    [Forms]![frmDisclosure]![Client] As CurrentClientID
FROM 
    tblReceipts 
INNER JOIN 
    tblClient 
    ON tblReceipts.ClientLookup = tblClient.ClientID
WHERE 
    (((tblClient.ClientID)=IIf([Forms]![frmDisclosure]![Client]=661,417,[Forms]![frmDisclosure]![Client])))
ORDER BY 
    tblClient.ClientName, tblReceipts.DateRec DESC;

现在,研究检索到的 CurrentClientID 值。

【讨论】:

  • 我不要 661 的数据,我要 417 的数据,我什么也得不到。
  • 这将始终为客户端 417 提供数据。当客户端为 661 时,我想要 417,否则,客户端如所述。
  • 我知道。但是你写了你没有收到任何数据,然后你问如何调试这个。要调试,您必须从某个“有效”的地方开始,然后逐步进行。那么查询是否检索 417 的数据?
  • 是的。当我说它总是会提供 417 的数据时,我已经测试了你的建议(即使你的建议是在我试图让它按照我的问题所说的那样做之前的情况。当我问如何调试时,我并不是说什么你似乎认为我的意思。
  • 运行上面调整后的查询,其中将显示来自 from 的 ClientID。
【解决方案2】:

通过更改表单的 On Current 事件中组合框的行源解决了该问题。

Select Case Client
    Case 661
        Me.ReceiptsLookup.RowSource = "SELECT tblReceipts.ID, tblClient.ClientID, tblClient.ClientName, tblReceipts.DateRec, tblReceipts.Type, tblReceipts.Amount, tblReceipts.SerialNo " & _
                                      "FROM tblReceipts INNER JOIN tblClient ON tblReceipts.ClientLookup = tblClient.ClientID " & _
                                      "WHERE (((tblClient.ClientID) = 417)) " & _
                                      "ORDER BY tblClient.ClientName, tblReceipts.DateRec DESC "

结束选择

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2016-02-06
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多