首页 文章

如何自动生成记录到表中

提问于
浏览
1

我会尽力保持这种简洁

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

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

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

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

我想过尝试使用追加查询来做到这一点,但没有走得太远 .

我知道如何使用VBA插入一条记录,所以一直认为我需要设置一个循环,但无法弄清楚如何循环通过studentID和ExerciseID .

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

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

2 回答

  • 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

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

    Cross join append query

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

相关问题