访问,使用组合框填充子表单

时间:2017-01-04 13:58:50

标签: ms-access

由于我是使用Access / VBA的初学者,我无法判断我的查询是否已经在另一个论坛中得到解决,所以如果有的话我会道歉。

我正在尝试使用主窗体上的组合框中的值填充子窗体。我希望当我在组合框中选择一个学生,然后在另一个组合框中选择一个以下模块,然后点击“添加模块”。它会将模块添加到子窗体中,并在底部子窗体中显示为该学生选择的所有模块。我按照视频获取了我目前拥有的代码,下面显示了我当前布局的截图(借口设计功能甚至还没有开始考虑)。

请注意:docmd的代码肯定是不正确的,我不确定要填充子窗体的内容,以便显示所选学生和所有选定的模块。

When you open form it looks like this, ideally how I want it to look when records are added for specific students

How it looks after I click 'Add module' goes to new record and doesn't display full list unless I click back on arrows.

代码 -

'combo box for StudentID updates all other student detail text boxes.
Private Sub studentIDcombo_AfterUpdate()
    programmetb = DLookup("ProgrammeID", "tblStudent", "[StudentID]=studentidcombo")
    firstnametb = DLookup("FirstName", "tblStudent", "[StudentID]=studentidcombo")
    surnametb = DLookup("Surname", "tblStudent", "[StudentID]=studentidcombo")
    StudentID1 = studentIDcombo
End Sub

'combo box for ModuleCode updates all other module detail text boxes.
Private Sub modulecodecombo_AfterUpdate()
    modulenametb = DLookup("ModuleName", "tblModule", "[ModuleCode]=modulecodecombo")
    creditstb = DLookup("Credits", "tblModule", "[ModuleCode]=modulecodecombo")
    semester1tb = DLookup("Semester_1", "tblModule", "[ModuleCode]=modulecodecombo")
    semester2tb = DLookup("Semester_2", "tblModule", "[ModuleCode]=modulecodecombo")
    prereqtb = DLookup("Pre_requisites", "tblModule", "[ModuleCode]=modulecodecombo")
End Sub

Private Sub AddModuleBut_Click()
    'Verification that studentID is selected.
    If IsNull(studentIDcombo) Then
        MsgBox "Please select student", , "Required"
        studentIDcombo.SetFocus
        Exit Sub
    End If
    'Verification that modulecode is selected.
    If IsNull(modulecodecombo) Then
        MsgBox "Please select a course", , "Required"
        modulecodecombo.SetFocus
        Exit Sub
    'Else create a record in the subform using the combo box data.
    Else
        DoCmd.GoToRecord , , acNewRec
        StudentID1 = studentIDcombo
        modulecodecombo.SetFocus
    End If
End Sub

额外信息:

在我能够为特定学生添加模块之后,我将开始编码条件,例如,如果您之前已经完成模块B等,则只能选择模块A.等。这可以通过当前布局实现吗?

我将制作学生表格以添加学生,然后他们将在此表格上添加模块。

提前感谢您提供任何帮助,我希望这是有道理的!

最诚挚的问候, < 3

1 个答案:

答案 0 :(得分:0)

首先,考虑重新设计表以使用正确的主键(自动增量整数)。说过你缺少的是创建新学生模块记录的命令。它看起来像这样:

DoCmd.RunSQL "INSERT INTO [studentmodulelinktable] (ProgrammeID,ModuleName) VALUES (" & studentIDcombo & ",'" & modulecodecombo & "')"

以上假设studentIDcombo具有数值,而modulecodecombo具有文本值。区别在于您是否使用单引号。