首页 文章

从文本框中的Combobox获取ID,其中第1列设置为0

提问于
浏览
0

我有一个表单,我想在其中实现级联组合框 .

第一个用户选择"Client Name",其中我有SQL语句获得3列 - 客户名,客户名和客户姓 . 为了允许用户输入名字而不是ID,设置了 Column Width: 0;3

然后用户选择"Work",其中我有SQL语句获得2列 - 工作ID,工作描述 . 为了允许用户输入工作描述而不是ID,设置了 Column Width : 0;2

想要级联列表,以便组合框中的“工作”列表仅显示工作表具有客户端ID的外键 .

我通过将SQL语句添加到工作组合框的 Row Source 来实现级联组合框 .

SELECT WorkTbl.WorkID, WorkTbl.WorkDescription, WorkTbl.ClientID 
FROM WorkTbl 
WHERE (((WorkTbl.ClientID)=Forms![Work Done Entry]!cboClientID);

“cboClientID”是Client的Combo-box的名称 .

但由于在cboClientID上设置了 Column Width: 0;3 ,因此用户将输入"Client Name"而不是"Client ID" . 因此SQL Query无法正常工作 .

有什么工作吗?我找到的一个解决方案(但无法使其工作)是添加一个文本框并在此文本框中设置客户端ID,然后使我们使用此文本框以获取SQL中所需的客户端ID . 得到了这个想法This Question

在此先感谢您回答此问题 . 任何帮助或建议表示赞赏 .

2 回答

  • 0

    你使用“CboclientID”组合框的“on after updated”事件怎么样?

    只需在更新事件后将此代码添加到“cboClientID”组合框:

    Dim SQL_GET As String
    SQL_GET = "SELECT WorkTbl.WorkID, WorkTbl.WorkDescription From WorkTbl WHERE (((WorkTbl.ClientID)=" & Nz(Me.cboClientID.Value, 0) & ");"
    Me.cboWork.RowSource = SQL_GET
    

    这样,每当您更新客户名称时,您的工作组合框也会根据您的选择进行更改 . 希望这可以帮助 .

  • 0

    您的SQL语句应该按原样工作 . SQL将使用Combobox控件的Value属性进行查询,并将包含ClientId,因为它是组合框数据中的第一列 .

    但是,当您第一次打开表单并且没有选择客户端时,将执行填充工作组合框的SQL . 因此,SQL不会返回任何数据,并且工作组合框保持为空 .

    要使其按预期工作,您必须在选择其他客户端时重新查询工作数据 . 一种方法是,为客户端组合框的After Update事件编写事件过程 . 在客户端组合框的属性中,转到事件,更新后并选择 [Event Procedure] . 然后将类似于此的VBA代码添加到表单的类模块中 .

    Private Sub cboClient_AfterUpdate()
        Me.cboWork.Requery
    End Sub
    

相关问题