我正在尽最大努力构建我的第一个数据库,但我遇到了一个我无法找到答案的问题。我是这个论坛的新手,正在编写任何类型的代码,所以请保持温柔。
当在表单内的列表框中双击学生姓名时,我试图在表格中创建新记录。
我想从 = lstStudent 中获取第一个 (StudentID) 列值的列表框
我想从中获取第二个 (CourseID) 列值的组合框:cboCourseID
我想从中获取第三(NoteID)列值的文本框 = txtCourseNoteID
正在所需表中创建新记录,没有不正确的代码错误,但没有值传递到字段。正在创建自动编号 (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
字段已填充,所以这不是问题所在。目标字段的格式是正确的,我想不出任何其他方式。
最佳答案
The new record is being created in the desired table and there are no incorrect code errors but there are no values being carried across to the fields. The autonumber is being created (AttendanceID) but the other columns are blank.
使用此 INSERT
语句,您将在新行中为这 3 个字段提供文本值 ...
INSERT INTO tblAttendance (StudentID, CourseID, NoteID)
VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')
但是 StudentID
、CourseID
和 NoteID
是数字字段,因此不接受这些文本值。在那种情况下,数据库引擎无法插入任何内容。您仍会添加一个新行(在 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
并在其中添加新行。或者,如果您可以使用绑定(bind)表单,Access 将自动负责存储新行……而无需编写代码。
关于sql - 如何使用 VBA 或宏更新具有 Access 窗体的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33054705/