美好的一天。我想知道为什么在执行查询时弹出参数请求。我有一个带有2个组合框的表格,其中第二个取决于第一个的值。当我涉及2个表时,我知道如何做到这一点。当有多对多关系时,我遇到了麻烦。
表1:名称 - Supply_Sources,字段 - Source_ID(pk),SupplySourceName
表2:名称 - Warehouse_Locations,字段 - WLocation_ID(pk),Location_Name
表3(联结):名称 - SupplySource_WarehouseLocation,字段 - Supply_Source_ID(pk),Location_In_ID(pk)
在我的表单上frmInventoryReceivedInput我有cboSupplySource和cboWLocation。 我用
填充cboSupplySource SELECT [Supply_Sources].[Source_ID], [Supply_Sources].[SupplySourceName] FROM Supply_Sources;
我试图根据cboSupplySource中的值在cboWLocation中获取一个下拉列表。我想查看耗材放置在仓库中的位置名称。
我在更新后的cboSupplySource中有一个requery(以cboWLocation作为控件名称)。我到目前为止提出的SQL是:
SELECT Warehouse_Locations.Location_Name,
SupplySource_WarehouseLocation.Supply_Source_ID,
SupplySource_WarehouseLocation.Location_In_ID
FROM Warehouse_Locations RIGHT JOIN (Supply_Sources LEFT JOIN
SupplySource_WarehouseLocation ON Supply_Sources.Source_ID =
SupplySource_WarehouseLocation.Supply_Source_ID) ON
Warehouse_Locations.WLocation_ID =
SupplySource_WarehouseLocation.Location_In_ID
WHERE (((Warehouse_Locations.Location_Name)=[frmInventoryReceivedInput].[cboSupplySource]));
运行时,弹出cboSupplySource,弹出输入参数值对话框,查找frmInventoryReceivedInput.cboSupplySource输入。我输入的任何内容都没有在cboWLocation中显示正确的列表。
显然,我没有正确的select语句。任何帮助将不胜感激。
答案 0 :(得分:0)
对于cboWLocation,请尝试使用recordSource查询:
SELECT Warehouse_Locations.Location_Name
FROM Warehouse_Locations INNER JOIN (Supply_Sources INNER JOIN
SupplySource_WarehouseLocation ON Supply_Sources.Source_ID =
SupplySource_WarehouseLocation.Supply_Source_ID) ON
Warehouse_Locations.WLocation_ID =
SupplySource_WarehouseLocation.Location_In_ID
WHERE ((Supply_Sources.SupplySourceName)=([Forms]![frmInventoryReceivedInput].[cboSupplySource]))
请注意,在这种情况下,组合框列必须设置为columncount 1,并且具有适当的列宽,因为您说您只想查看位置名称。此外,您应该确保cboWLocation未绑定到控件源,以便不覆盖任何内容。
您可以在cboWLocation Enter Event中将其应用于VBA。 在以下代码示例中,如果combobox cboSupplySource中存在值,则仅更新组合框cboWLocation。
Private Sub cboWLocation_Enter()
If not (isNull(Me!cboSupplySource) Or Me!cboSupplySource.ListIndex = -1) then
Me.cboWLocation.RowSource = strSQL 'Put here the previous mentioned SQLString
End if
End Sub
提示:当您将cboSupplySource中的绑定列更改为PK SourceID而不是名称时,性能会更好。 (在combobox cboSupplySource中有两列)然后使用此PK来比较WHERE语句而不是名称。这就是表格中的关键词。
编辑:在WHERE语句中,您可能必须将名称比较放在'之间。 '因为它是一个字符串