从文本框中的组合框中获取 ID 字段,其中第一列设置为 0
Get ID Filed from a Combobox in a Text Box where 1st column set to 0
我有一个表单,我想在其中实现级联组合框。
第一个用户选择 "Client Name",其中我有 SQL 语句获取 3 列 - 客户 ID、客户名字和客户姓氏。为了允许用户输入名字而不是 ID,设置了 Column Width: 0;3
2nd 然后用户选择 "Work" 我有 SQL 语句获取 2 列 - 工作 ID,工作描述。为了让用户输入作品描述,而不是 ID,设置了 Column Width : 0;2
想要级联列表,以便组合框中的 "Work" 列表仅显示
工作 table 有一个指向客户端 ID 的外键。
我通过将 SQL 语句添加到工作组合框的 Row Source
来实现级联组合框。
SELECT WorkTbl.WorkID, WorkTbl.WorkDescription, WorkTbl.ClientID
FROM WorkTbl
WHERE (((WorkTbl.ClientID)=Forms![Work Done Entry]!cboClientID);
"cboClientID" 是客户端组合框的名称。
但是因为用户将输入 "Client Name" 而不是 "Client ID" 因为已经在 cboClientID 上设置了 Column Width: 0;3
。
因此 SQL 查询无效。
有解决办法吗?
我找到的一种解决方案(但无法使其工作)是添加一个文本框并在此文本框中设置客户端 ID,然后使用此文本框获取 [=40= 中所需的客户端 ID ].
得到这个想法形式 This Question
提前感谢您回答这个问题。
任何帮助或建议表示赞赏。
如何使用 "CboclientID" 组合框的 "on after update" 事件?
只需将此代码添加到更新事件后的 "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
这样,每次更新客户名称时,您的工作组合框也会根据您的选择进行更改。
希望这有帮助。
您 SQL 语句应该按原样工作。 SQL 将使用 Combobox 控件的值 属性 进行查询,并且它将包含 ClientId,因为它是组合框数据中的第一列。
但是,当您第一次打开表单并且没有客户端 selected 时,将执行填充工作组合框的 SQL。因此 SQL 不会 return 任何数据并且工作组合框保持为空。
为了使这项工作按预期进行,每当您 select 另一个客户端时,您都必须重新查询工作数据。一种方法是为客户端组合框的更新后事件编写事件过程。
在客户端组合框的属性中,转到事件、更新后和 select [Event Procedure]
。然后在表单的class模块中添加VBA类似这样的代码。
Private Sub cboClient_AfterUpdate()
Me.cboWork.Requery
End Sub
我有一个表单,我想在其中实现级联组合框。
第一个用户选择 "Client Name",其中我有 SQL 语句获取 3 列 - 客户 ID、客户名字和客户姓氏。为了允许用户输入名字而不是 ID,设置了 Column Width: 0;3
2nd 然后用户选择 "Work" 我有 SQL 语句获取 2 列 - 工作 ID,工作描述。为了让用户输入作品描述,而不是 ID,设置了 Column Width : 0;2
想要级联列表,以便组合框中的 "Work" 列表仅显示 工作 table 有一个指向客户端 ID 的外键。
我通过将 SQL 语句添加到工作组合框的 Row Source
来实现级联组合框。
SELECT WorkTbl.WorkID, WorkTbl.WorkDescription, WorkTbl.ClientID
FROM WorkTbl
WHERE (((WorkTbl.ClientID)=Forms![Work Done Entry]!cboClientID);
"cboClientID" 是客户端组合框的名称。
但是因为用户将输入 "Client Name" 而不是 "Client ID" 因为已经在 cboClientID 上设置了 Column Width: 0;3
。
因此 SQL 查询无效。
有解决办法吗? 我找到的一种解决方案(但无法使其工作)是添加一个文本框并在此文本框中设置客户端 ID,然后使用此文本框获取 [=40= 中所需的客户端 ID ]. 得到这个想法形式 This Question
提前感谢您回答这个问题。 任何帮助或建议表示赞赏。
如何使用 "CboclientID" 组合框的 "on after update" 事件?
只需将此代码添加到更新事件后的 "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
这样,每次更新客户名称时,您的工作组合框也会根据您的选择进行更改。 希望这有帮助。
您 SQL 语句应该按原样工作。 SQL 将使用 Combobox 控件的值 属性 进行查询,并且它将包含 ClientId,因为它是组合框数据中的第一列。
但是,当您第一次打开表单并且没有客户端 selected 时,将执行填充工作组合框的 SQL。因此 SQL 不会 return 任何数据并且工作组合框保持为空。
为了使这项工作按预期进行,每当您 select 另一个客户端时,您都必须重新查询工作数据。一种方法是为客户端组合框的更新后事件编写事件过程。
在客户端组合框的属性中,转到事件、更新后和 select [Event Procedure]
。然后在表单的class模块中添加VBA类似这样的代码。
Private Sub cboClient_AfterUpdate()
Me.cboWork.Requery
End Sub