2016-12-30 4 views
1

これを簡潔に保つために全力を尽くします。テーブルにレコードを自動的に生成する方法

テーブルとリレーションシップはこのようになります。

[関係] [1] http://imgur.com/a/Ic9uU

私は何を達成しようとしていることはこれです。 毎月新しいtestIDが追加されます。すべての生徒は、各テストIDごとにすべてのエクササイズを行います。これは結果テーブルに記録されます。新しいテストが追加されると、結果テーブルに新しいレコードを自動的に追加して、各学生の各エクササイズの新しいレコードが作成されるようにします。

私は10人の学生と8人の練習があり、新しいTestID 2016-12を追加したとします。私は、それぞれのエクササイズとスチューデントの組み合わせごとに1つ、testID 2016-12の結果テーブルに80の新しいレコードを作成します。

私はこれを行うために追加クエリを使用しようと考えましたが、それほど遠くには達しませんでした。私はVBAを使用して1つのレコードを挿入する方法を知っている

ので、私はループを設定する必要がありますが、どのようにstudentIDのとExerciseID年代をループに把握することはできません考えています。

すべての学生運動の組み合わせを生成して、特定のテストIDを使用してテーブルに追加することを使用してクエリを作成する方法はあります。

残念ですが、これは少しばかりです。第三または第四のレコードセットにレコードを追加しながら、学生や演習とループこれらのあなたの

答えて

1

オープン2レコードセットをいただき、ありがとうございます。

あなたは出発点として、この例を使用することができます - 少なくとも、あなたのアイデアを得るでしょう:

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

このクエリを実行すると、それはテストIDをお願いしますし、そのテストIDに対するすべての学生/エクササイズの組み合わせのための行を追加します。それは次のようになります。

+0

こんにちは ありがとうございます。これは私が行ったことであり、それをフォームに入れることができました。ありがとうございます – NumberCruncher

+0

心配しないでください。あなたがそれに満足していれば、答えを受け入れたものとしてマークしてください。ありがとう。 – Skippy

関連する問題