如何自动生成记录到表中

时间:2016-12-30 00:12:36

标签: sql ms-access access-vba

我会尽力保持这种简洁

我的表和关系看起来像这样。

[关系] [1] http://imgur.com/a/Ic9uU

我想要实现的是这个。 每个月都会添加一个新的testID。每个学生为每个testID进行每次练习,这会记录在结果表中。当添加新测试时,我想在结果表中自动添加新记录,以便为每个学生提供EACH练习的新记录。

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

我考虑过尝试使用追加查询来做到这一点但是没有达到目的。

我知道如何使用VBA插入一条记录,所以一直以为我需要设置循环,但无法弄清楚如何循环学习ID和ExerciseID。

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

对不起,如果有点到处都是。感谢你的

2 个答案:

答案 0 :(得分:1)

与学生和练习打开两个记录集并循环播放这些记录集,同时将记录添加到第三个或第四个记录集。

您可以将此示例作为起点 - 至少您会明白这一点:

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

答案 1 :(得分:1)

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

Cross join append query

运行此查询时,它会询问您TestID,然后针对该TestID为每个学生/练习组合添加一行。