我在尝试使用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
答案 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
。
使用交叉表查询可以获得包含课程及其评分为列的视图。