Sql 如何将记录自动生成到表中

Sql 如何将记录自动生成到表中,sql,ms-access,vba,Sql,Ms Access,Vba,我会尽我所能保持这个简洁 我的表和关系如下所示 [关系][1] 我想要达到的是这个。 每月添加一个新的testID。每个学生在每个测试中都做每个练习,这记录在结果表中。当添加新测试时,我希望在结果表中自动添加新记录,以便每个学生的每个练习都有一个新记录 假设我有10个学生和8个练习,我添加了一个新的TestID 2016-12。我希望使用testID 2016-12在结果表中创建80个新记录,每个练习学生组合一个记录 我曾想过尝试使用一个追加查询来实现这一点,但没有成功 我知道如何使用VBA插入

我会尽我所能保持这个简洁

我的表和关系如下所示

[关系][1]

我想要达到的是这个。 每月添加一个新的testID。每个学生在每个测试中都做每个练习,这记录在结果表中。当添加新测试时,我希望在结果表中自动添加新记录,以便每个学生的每个练习都有一个新记录

假设我有10个学生和8个练习,我添加了一个新的TestID 2016-12。我希望使用testID 2016-12在结果表中创建80个新记录,每个练习学生组合一个记录

我曾想过尝试使用一个追加查询来实现这一点,但没有成功

我知道如何使用VBA插入一条记录,所以一直在想我需要设置一个循环,但不知道如何通过studentID和ExerciseID循环

有没有办法创建一个查询,生成每个学生练习组合,然后使用该组合将特定的testID附加到表中


很抱歉,这里有点乱。感谢您的

打开两个包含学生和练习的记录集,并在向第三个或第四个记录集添加记录时循环这些记录

您可以使用此示例作为起点-至少您会了解:

Public Sub AddRecords()

    Dim dbs         As DAO.Database
    Dim rss         As DAO.Recordset
    Dim rst         As DAO.Recordset
    Dim fld         As DAO.Field

    Dim intCount    As Integer
    Dim lngRevenue  As Long
    Dim datDate     As Date
    Dim booNext     As Boolean

    Set dbs = CurrentDb
    Set rss = dbs.OpenRecordset("Select * From tblSales Order By [Purchase Week]")
    Set rst = dbs.OpenRecordset("Select * From tblSalesWeek")

    If rss.RecordCount > 0 Then
        datDate = rss.Fields("Purchase Week").Value
    End If
    While rss.EOF = False
        rst.AddNew
            If DateDiff("d", datDate, rss.Fields("Purchase Week").Value) = 0 Then
                intCount = intCount + rss.Fields("Customer Count").Value
                lngRevenue = lngRevenue + rss.Fields("Revenue").Value
                booNext = True
            Else
                booNext = False
            End If
            For Each fld In rss.Fields
                Select Case fld.Name
                    Case "Purchase Week"
                        rst.Fields(fld.Name).Value = datDate
                    Case "Customer Count"
                        rst.Fields(fld.Name).Value = intCount
                    Case "Revenue"
                        rst.Fields(fld.Name).Value = lngRevenue
                    Case Else
                        rst.Fields(fld.Name).Value = rss.Fields(fld.Name).Value
                End Select
            Next
        rst.Update
        If booNext = True Then
            rss.MoveNext
        End If
        datDate = DateAdd("d", 7, datDate)
    Wend
    rst.Close
    rss.Close

    Set fld = Nothing
    Set rst = Nothing
    Set rss = Nothing
    Set dbs = Nothing

End Sub

您可以作为追加查询来执行此操作。它看起来像这样:


当您运行此查询时,它将要求您输入TestID,然后针对该TestID为每个学生/练习组合添加一行。

您好,谢谢您。这就是我所做的,并设法把它做成一种形式。非常感谢你的回答。我同意斯基皮的建议。我肯定会看一下,因为我也想学习如何使用代码循环记录。非常感谢。