我正在尽最大努力建立我的第一个数据库,但我遇到了一个我无法找到答案的问题。我在这个论坛上是一个完整的新手,并编写任何类型的代码,所以请温柔。
我想在表格中的列表框中双击学生的名字时,在表格中创建一条新记录。
我想从= lstStudent
获取第一个(StudentID)列值的列表框组合框,我想从中获取第二个(CourseID)列值:cboCourseID
我想从= 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
填充了字段,因此这不是问题。格式对于目标字段是正确的,我想不出任何其他方式。
答案 0 :(得分:2)
新记录正在所需的表中创建,但没有 错误的代码错误但没有传递给的值 田野。正在创建自动编号(AttendanceID)但是 其他栏目是空白的。
使用此INSERT
语句,您将为新行中的这3个字段提供文本值...
INSERT INTO tblAttendance (StudentID, CourseID, NoteID)
VALUES ('me.lstStudent','me.cboCourseID','me.txtCourseNoteID')
但是StudentID
,CourseID
和NoteID
是数字字段,因此不接受这些文字值。在那种情况下,db引擎无法插入任何内容。您仍然添加了一个新行(使用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将自动处理存储新行...而无需编写代码。
答案 1 :(得分: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 "');"