2015-10-10 64 views
3

我正在尽我所能建立我的第一个数据库,但我遇到了一个问题,我找不到答案。我在这个论坛上是一个完整的新手,并且编写任何代码,所以请温和。如何使用VBA或宏访问表单来更新表格?

我想创建一个表中的新纪录,当一个学生的名字被双击在一个窗体内的列表框内。

列表框,我想利用从第一(StudentID)列的值= lstStudent

组合框,其中我想从在第二个(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 

字段填充,所以这不是问题。目标字段的格式是正确的,我想不出任何其他的东西。

+1

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

回答

2

新的记录在所需的表创建并且没有 不正确的代码错误但没有任何价值被传递到 的领域。自动编号正在创建(AttendanceID),但其他列为空白。

有了这个INSERT说法,你提供的新行中的3个字段文本值...

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

然而StudentIDCourseIDNoteID是数字字段,所以不会接受这些文本值。在这种情况下,数据库引擎不能插入任何东西。您仍然会添加新行(新的自动编号值为AttendanceID),但其他字段为空。

如果包括dbFailOnError选项与.Execute,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将自动处理存储新行的操作,而无需编写代码。

+0

非常感谢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 "');" 

参见here for useful info

+0

我想我刚刚收到你的邀请加入LinkedIn。问题在于它出现在LinkedIn上与我的错误配置文件相关的电子邮件地址。这里是我正确的LinkedIn个人资料:https://www.linkedin.com/profile/edit?trk=nav_responsive_sub_nav_edit_profile –

相关问题