请参阅OpenArgs以标识字段名称

时间:2017-10-11 15:07:07

标签: vba ms-access access-vba ms-access-2013

我在尝试使用OpenArgs引用表中的字段名时遇到了一些问题。我对此很新,所以请耐心等待。

所以我有一个Report(CourseCatalog),它有一个文本框,其中包含从表中提取的课程名称(tblCourses)。当您单击课程时,它会打开一个表单,您可以选择为课程评分(frmRate)。我使用OpenArgs(从报告到评级表)来为frmRate制作标题。工作良好。

现在我需要获取先前在代码中定义的数据(选定的星数,(intNumStars)),并将其放入表中。该表(" Allratings")将课程名称(OpenArgs值)作为列名称,我想将intNumStars(1-5)放入这些列的单元格中。

我似乎在引用VarArgs时遇到了一些问题。我的语法/逻辑可能(可能)是错误的,如果有人知道更好的方法来完成这项任务,请告诉我你的想法!谢谢!

Private Sub btnSubmit_Click()
Dim varargs
Dim rst As dao.Recordset
Dim db As dao.Database
Dim fld As dao.Field
varargs = Me.OpenArgs
Set db = CurrentDb()
Set rst = db.OpenRecordset("Allratings")

For Each fld In rst.Fields
    If fld.Name = "varargs" Then
        rst.AddNew
        rst!"varargs" = intNumStars
        rst.Update
    End If
Next

End Sub

2 个答案:

答案 0 :(得分:1)

你正在使用字符串做奇怪的事情,当你尝试保存/编译它时,你应该得到一个描述性的编译错误。

varargs指的是变量varargs

"varargs"是一个包含字母v,a,r等的文字字符串。

rst!"varargs"应为rst.Fields("varargs")以避免编译错误,但实际上应为rst.Fields(varargs)

如果您更正了所有错误放置的引号,则会得到:

Private Sub btnSubmit_Click()
Dim varargs As String
Dim rst As dao.Recordset
Dim db As dao.Database
Dim fld As dao.Field
varargs = Me.OpenArgs
Set db = CurrentDb()
Set rst = db.OpenRecordset("Allratings")

For Each fld In rst.Fields
    If fld.Name = varargs Then
        rst.AddNew
        rst.Fields(varargs) = intNumStars
        rst.Update
    End If
Next
End Sub

如果Me.OpenArgs仅包含字段名称

,这似乎有效

答案 1 :(得分:0)

Eric已经展示了如何使您的代码正常工作,但您的表格设计将证明是不切实际的。为每个新课程添加新列不是您使用数据库的方式。

我建议

<强> tblCourses

+----------+------------+
| CourseID | CourseName |
+----------+------------+
|        1 | foo        |
|        2 | bar        |
+----------+------------+

<强>向tblUsers

+--------+----------+
| UserID | UserName |
+--------+----------+
|      7 | John     |
|      8 | Kate     |
+--------+----------+

allRatings (这是Junction table

+----------+--------+----------+
| CourseID | UserID | NumStars |
+----------+--------+----------+
|        1 |      7 |        1 |
|        1 |      8 |        4 |
|        2 |      7 |        3 |
+----------+--------+----------+

因此,新评级是allRatings中的新记录,具有固定的列名称。您可以通过CourseID电话从传递的课程名称中获取DLookup

使用交叉表查询可以获得包含课程及其评分为列的视图。