2016-12-30 186 views
1

我会尽我所能保持这个简洁如何自动生成记录到表

我的表和关系是这样的。

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

我想要达到的就是这个。 每个月都会添加一个新的testID。每个学生都会为每个testID进行每项练习,并将其记录在结果表中。当添加新的测试时,我想自动在结果表中添加新记录,以便每个学生都有一个每个练习的新记录。

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

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

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

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

对不起,如果这是有点全地方。谢谢你

回答

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 
+0

非常感谢您的答复。我已经与skippy的建议。我一定会看看这个,因为我想学习如何使用代码来循环记录。谢谢 – NumberCruncher

1

你可以做到这一点作为一个追加查询。它会是这个样子:

Cross join append query

当您运行此查询,它会问你的TestID,然后添加一行针对TestID每个学生/运动组合。

+0

嗨 谢谢你。这就是我所做的,并设法将它放在一个表格中。非常感谢你 – NumberCruncher

+0

不用担心。如果您满意,请将答案标记为已接受。谢谢。 – Skippy