如何使用VBA或宏更新具有访问权限的表单的表?

时间:2015-10-10 13:50:38

标签: sql forms ms-access insert access-vba

我正在尽最大努力建立我的第一个数据库,但我遇到了一个我无法找到答案的问题。我在这个论坛上是一个完整的新手,并编写任何类型的代码,所以请温柔。

我想在表格中的列表框中双击学生的名字时,在表格中创建一条新记录。

我想从= 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

填充了字段,因此这不是问题。格式对于目标字段是正确的,我想不出任何其他方式。

2 个答案:

答案 0 :(得分:2)

  

新记录正在所需的表中创建,但没有   错误的代码错误但没有传递给的值   田野。正在创建自动编号(AttendanceID)但是   其他栏目是空白的。

使用此INSERT语句,您将为新行中的这3个字段提供文本值...

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

但是StudentIDCourseIDNoteID是数字字段,因此不接受这些文字值。在那种情况下,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 "');" 

另见here for useful info