如何使用VBA或宏在Access中使用表单更新表格?

3
我正在尽我最大的努力构建我的第一个数据库,但我遇到了一个问题,我找不到答案。我是这个论坛和任何代码编写方面的新手,所以请温柔一点。
我试图在表中创建一个新记录,当列表框内的学生姓名被双击时。该列表框位于一个表单内。
我想要从lstStudent列表框中获取第一列(StudentID)的值;从cboCourseID组合框中获取第二列(CourseID)的值;从txtCourseNoteID文本框中获取第三列(NoteID)的值。
新纪录将被创建在所需的表中,没有错误代码,但没有值传递到字段中。自动编号已被创建(AttendanceID),但其他列为空。以下是我的代码:
  Private Sub lstStudent_DblClick(Cancel As Integer)
     CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')" 
End Sub

这些字段已填写,因此不是问题所在。目标字段的格式正确,我无法想到其他阻碍。


1
检查代码尝试插入表格的值。在查询设计器中创建一个新查询,切换到SQL视图,粘贴此查询并运行:SELECT 'me.lstStudent' AS StudentID, 'me.cboCourseID' AS CourseID,'me.txtCourseNoteID' AS NoteID - HansUp
2个回答

2
新记录正在所需的表中创建,没有错误代码错误,但没有值传递到字段。自动编号正在创建(AttendanceID),但其他列为空。
使用此INSERT语句,您为新行提供了3个字段的文本值...
INSERT INTO tblAttendance (StudentID, CourseID, NoteID)
VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')

然而,StudentIDCourseIDNoteID是数值字段,因此无法接受这些文本值。在这种情况下,数据库引擎无法插入任何内容。新行将仍被添加(其中包含AttendanceID的新自动编号值),但这些其他字段为空。
如果您在.Execute中使用dbFailOnError选项,Access将通知您有关问题的信息(错误#3464,“表达式中的数据类型不匹配”)并中止插入操作--不会添加新行...
CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')", dbFailOnError

采用类似@HarveyFrench建议的方法,但从VALUES列表中删除单引号...

Dim strInsert As String
strInsert = "INSERT INTO tblAttendance (StudentID, CourseID, NoteID)" & vbCrLf & _
    "VALUES (" & Me.lstStudent.Value & "," & Me.cboCourseID.Value & "," & _
    Me.txtCourseNoteID.Value & ");"
Debug.Print strInsert ' <- view this in Immediate window; Ctl+g will take you there
CurrentDb.Execute strInsert, dbFailOnError

根据您告诉我们的内容,我认为那样做可能是可行的,但我不确定这是否是达到目标的最佳方式。您可以打开DAO.Recordset并在其中添加新行。或者,如果您可以使用绑定表单,Access会自动处理存储新行的操作...无需编写代码。


非常感谢HansUp,它现在正好做我需要的事情! 我非常感激您的解释。表单未绑定到数据集的原因是数据将从多个表中提取以填充下拉框,然后我需要将该信息写入另一个单独的表中。我不确定这是否是实现目标的最直接方式,但这是我首次尝试这样做,我正在学习中。再次感谢您的帮助,也感谢@HarveyFrench。 - EnglischAlternativ

0

更改这个

      CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')" 

成为这样

 CurrentDb.Execute "INSERT INTO tblAttendance (StudentID, CourseID, NoteID) _ 
 VALUES ('" & me.lstStudent & "','" & me.cboCourseID & "','" & me.txtCourseNoteID "');" 

另请参阅此处有用的信息


我想我刚刚收到了你的邀请加入LinkedIn。问题是,它通过与我在LinkedIn上关联的错误个人资料的电子邮件地址发送给我。这是我的正确的LinkedIn个人资料链接:https://www.linkedin.com/profile/edit?trk=nav_responsive_sub_nav_edit_profile - Excel Hero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接