【问题标题】:How do I update a table with a form in access using VBA or a Macro?如何使用 VBA 或宏在访问中更新具有表单的表?
【发布时间】:2016-01-08 08:56:43
【问题描述】:

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

当学生的姓名在表单内的列表框中双击时,我试图在表中创建新记录。

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

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

【问题讨论】:

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

标签: sql forms ms-access insert vba


【解决方案1】:

改变这个

      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

【讨论】:

  • 我想我刚收到你的邀请加入 LinkedIn。问题是它通过了一个与我在 LinkedIn 上的错误个人资料相关联的电子邮件地址。这是我正确的 LinkedIn 个人资料:linkedin.com/profile/…
【解决方案2】:

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

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

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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多