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によって親フォームにリンクされています。問題なくユーザーにトラックを追加できます(私たちの組織では、生物学や化学など、複数のトラックを持つことができます)。

目標は、3番目のフォームで、ユーザーの入力内容に基づいて登録情報を入力することです。しかし、登録テーブルをクエリに追加すると、更新されません(SQLの観点からは理にかなっています)。

トラックテーブルを更新するときに、登録テーブルの行を更新/挿入することはできますか?もしそうなら、どのように?私はMSSQLServerとC#.NETの経験があるので、完全に無知ではありません(ほとんどの場合)。

また、よくできた登録データベースへのこのリンクを見つけましたが、必要な機能がありません。 http://office.microsoft.com/en-gb/templates/classroom-management-database-TC001018407.aspx?CategoryID=CT101426031033&av=ZAC000&AxInstalled=1&c=0

編集:適度に近づく。登録テーブルへの左結合は可能ですが、フォームのレコードを更新できないことに気付きました。クエリはここにあります:

SELECT tblUserTrack.UserTrackID、tblUserTrack.UserID、tblUserTrack.TrackID、tblCourses。[コースタイトル]、tblRegistrationNew.Grade、tblRegistrationNew.CompleteDTTM FROM(tblUserTrack INNER JOIN tblCourses ON tblUserTrack.TrackID = tblCourses.TrackID)LEFT tblRegistrationNew.UserTrackID;

4

1 に答える 1

0

したがって、本当に良い解決策はありませんでした。データベース設計のさまざまな変更を試みましたが、上記で書いたものはすでにうまく設計されています。私のニーズのために、2つのサブフォームを持つ単一のフォームがありました。メインフォームには、名前、住所などの学生の人口統計がありました。最初のサブフォームは、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 に答える