0

我有一个我们组织的课程注册数据库。它跟踪的主要内容是:用户信息(姓名等),跟踪信息(即您的专业前:生物学)和课程信息(哪些课程适用于哪些课程)。

所以数据结构看起来像这样。

tblUsers
UserID (PK)
FirstName
LastName
.
tblUserTrack
UserTrackID (PK)
UserID (FK) - links to tblUsers
TrackID (FK - links to tblTrack).
.
tblTrack
TrackID (PK)
TrackName
.
tblCourses
CourseID (PK)
CourseName
TrackID (FK links to tblTrack)
.
tblRegistrationNew
RegistrationID (PK)
UserTrackID (FK links to tblUserTrack)
Grade
CompletionDTTM

注册表单有 3 个元素: 父表单包含用户人口统计信息 轨道子表单包含用户/轨道信息,通过 UserID 链接到父表单。您可以毫无问题地向用户添加曲目(在我们的组织中,他们可以有多个曲目,例如生物学和化学)。

第三种形式的目标是根据用户输入的内容填充注册信息。但是,每当我将注册表添加到查询中时,它都不会更新(从 SQL 的角度来看这是有道理的)。

更新跟踪表时是否可以在注册表中更新/插入行?如果有怎么办?我有 MS SQL Server 和 C#.NET 经验,所以我并不完全无知(只是大部分)。

我还发现这个链接到一个做得很好的注册数据库,但它没有我需要的功能。 http://office.microsoft.com/en-gb/templates/classroom-management-database-TC001018407.aspx?CategoryID=CT101426031033&av=ZAC000&AxInstalled=1&c=0

编辑:相当接近。我意识到我可以对注册表进行左连接,但我无法更新表单中的记录。查询在这里:

选择 tblUserTrack.UserTrackID, tblUserTrack.UserID, tblUserTrack.TrackID, tblCourses.[Course Titles], tblRegistrationNew.Grade, tblRegistrationNew.CompleteDTTM FROM (tblUserTrack INNER JOIN tblCourses ON tblUserTrack.TrackID = tblCourses.TrackID) LEFT JOIN tblRegistrationNew ON tblUserTrack.UserTrackID tblRegistrationNew.UserTrackID;

4

1 回答 1

0

所以没有真正好的解决方案。我尝试了对数据库设计的各种修改,但我上面写的已经设计得很好了。为了我的需要,我有一个带有两个子表单的表单。主要表格有学生的人口统计信息,例如姓名、地址。第一个子表单是下拉列表中的轨道(基本上是学位,即生物学),它填充了 tblUserTrack 表。然后,我将代码放入 AfterInsert 事件中,以便在用户插入新行时在 tblRegistration 表中生成新行。

Private Sub Form_AfterInsert()

    Dim strSQL As String

    strSQL = "INSERT INTO tblRegistration (UserTrackID, CourseID) " & _
        "SELECT tblUserTrack.UserTrackID, tblCourses.CourseID FROM tblUserTrack INNER JOIN " & _
        "tblCourses ON tblCourses.TrackID = tblUserTrack.TrackID " & _
        "WHERE tblUserTrack.UserID = " & UserID.Value & "AND tblUserTrack.UserTrackID NOT IN " & _
        "(SELECT tblRegistration.UserTrackID FROM tblRegistration INNER JOIN tblUserTrack ON tblUserTrack.UserTrackID = tblRegistration.UserTrackID " & _
        "WHERE tblUserTrack.UserID = " & UserID.Value & ")"

    DoCmd.RunSQL (strSQL)


End Sub

在此之后,它的工作令人满意。我唯一没有做的是处理曲目更改时的情况(即从生物学到化学),在这种情况下,我指示用户只需删除旧曲目(生物学)并插入新曲目(化学)。经过许多小时的研究后,总而言之,实际上没有办法进行“级联插入”,这是我需要做的,至少据我所知。至少现在我知道代码在 SQL 执行方面做了什么。

于 2012-11-27T19:44:30.450 回答