首页 文章

Access 2013中1:m表的主窗体和子窗体

提问于
浏览
0

我想在表单上显示两个表中的字段 . 这两个表是“客户”和“车辆” . (1:M) . 客户字段将显示在主窗体中,并显示我在“数据表”视图中放置子窗体的“车辆”字段,并为vehicleID添加了一个文本框 . 当我输入CustomerID并单击另一个表单上的命令按钮时,将使用子表单(sfrmVehicle)打开此主表单(frmCustomerDetails) . 客户字段正确显示在主窗体中 . 没有错误消息,但我无法在子窗体中看到Vehicle字段 . 它只显示#Name?六次 . 车辆表中有六条记录,所以我认为它甚至没有为该客户过滤车辆 . (车辆表中只有两个记录属于该客户 . )我的Ms Access 2013 VBA代码是;

Dim strSQL1 As String
Dim rs1 As DAO.Recordset
strSQL1 = "SELECT Customer.CustomerID, " & _
               "  Customer.fName, " & _
               "  Customer.lName, " & _
               "  Customer.Telephone, " & _
               "  Customer.MobilePhone, " & _
               "  Customer.EMail, " & _
               "  Customer.Address1, " & _
               "  Customer.Address2, " & _
               "  Customer.City, " & _
               "  Customer.State, " & _
               "  Customer.PostalCode, " & _
               "  Vehicle.VehicleID " & _
               "FROM Customer INNER JOIN Vehicle ON Customer.CustomerID = Vehicle.CustomerID;"
Set rs1 = CurrentDb.OpenRecordset(Name:=strSQL1, Type:=dbOpenDynaset)
rs1.FindFirst "[CustomerID] =""" & txtIDs & """"
DoCmd.OpenForm "frmCustomerDetails"
[Forms]![frmCustomerDetails]![txtCustomerName] = rs1.Fields!fName
..
..
[Forms]![frmCustomerDetails]![sfrmVehicle]![txtVehicleId].ControlSource = rs1.Fields!VehicleID
rs1.Close
Set rs1 = Nothing

主窗体和子窗体是否必须有两个不同的SQL语句?然后怎么做过滤 . 需要帮忙 . 请 .

1 回答

  • 0

    要对子表单进行过滤,只需要这段代码;

    Me.sfrmVehicle.Form.Filter = "[vehicleID]=" & Me.vehicleIDTextBox
    Me.sfrmVehicle.Form.FilterOn = True
    

    对于子窗体中的名称错误,可能是因为您没有在其属性表的数据选项卡中选择正确的源对象 .

    Edit: 与安德烈所说的SQL语句一样,你不需要它们 .

相关问题