【问题标题】:How to use a INSERT INTO SELECT query in Access VB?如何在 Access VB 中使用 INSERT INTO SELECT 查询?
【发布时间】:2015-04-07 00:22:22
【问题描述】:

我有一个名为 Student 的表,其中包含有关学生的信息,例如他们的姓名。另一个名为 Exam 的表,其中包含考试日期和学生姓名作为主键。我有一个表格,可用于从列表框中选择多个学生,然后在所选日期将其插入到考试表中。

我相信我的语法是正确的,因为如果我使用 Access 的查询生成器并复制/粘贴我的 SQL 查询并删除表单内容,它将按预期工作。当我尝试从 VB 运行它时遇到的错误是 Exam.Exam_Date 是未知的并检查我的拼写。我正在拼写它在表格中的拼写方式。

难道不能在 Access 的 VB 中使用 INSERT INTO SELECT 查询吗??

这是我的代码:

Private Sub add_Click()
Dim Students As String
Dim i As Integer
Dim dbs As DAO.Database
Dim SQL As String

SQL = ""
Students = "'"

For i = 0 To Me.StudentListBox.ListCount - 1
    'check to see if students name is selected
    If Me.StudentListBox.Selected(i) = True Then
        'list student names in a string separated by commas
        Students = Students + CStr(Me.StudentListBox.ItemData(i)) & "','"
    End If
Next

If IsNull(Me.ExamDate) Then 'check if user entered an Exam date
    MsgBox "Please select a date for the Exam."
ElseIf Students = "'" Then 'check if user selected ant Students
    MsgBox "Please select Students to add to an Exam."
Else
    'remove trailing comma
    Students = Left(Students, Len(Students) - 2)
    
    'sql query to add list of Students to an Exam on specified date
    SQL = "INSERT INTO Exam (Exam.Exam_Date, Exam.Student_Name) SELECT '" & CDate(Me.ExamDate) & "', Students.Full_Name FROM Students WHERE Students.Full_Name IN (" & Students & ");"
    DoCmd.RunSQL SQL
End If

结束子

【问题讨论】:

  • 我认为这不重要,但请尝试将插入更改为 INSERT INTO Exam (Exam_Date, Student_Name) SELECT 。 Access可以顺便使用insert...select语句。
  • 谢谢jpw!我不太明白为什么,但你的建议奏效了!

标签: sql ms-access vba ms-access-2013


【解决方案1】:

我知道您可能已经发现了您的问题,但我确实想指出其他一些问题。

构建 WHERE IN 子句是一个非常有趣的设置。或者,您可以在 For/Next 循环中迭代 INSERT INTO ... VALUES:

INSERT INTO Exam (Exam_date, Student_Name) 
VALUES(#" & Me.ExamDate & "#, '" & Me.StudentListBox.ItemData(i) & "') 

同时检查您的 Exam_Date 字段。从您的查询看来,您将日期保留为字符串字段,但如果日期/时间字段,VBA 查询需要 # # 而不是单引号。如果表单已经格式化为这些日期类型,也不需要转换函数、CStr 或 CDate。

最后,对于数据库设计建议,您应该在 Exam 表中使用 StudentID,而不是通过 Full_Name 关联两个表:更好的索引、主/外键引用完整性、数据存储效率。此外,如果名称有引号,则无需转义或拼写错误,并且整数值在管理表之间的数据(即重复、查找)时更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多