0

MS Access データベースで、次の 3 つの属性の組み合わせに基づいてレコードの重複を防止する必要がある状況があります。

  • StudentNumber
  • ColleagueID
  • TypeOfAttending

したがって、1 つの組み合わせ ( StudentNumber& ) に対して、 、およびColleagueIDの 3 種類の出席があります。ABC

次に例を示します。

+---------------+-------------+---------------+
| StudentNumber | ColleagueID | AttendingType |
+---------------+-------------+---------------+
|           100 |          10 | A             |
|           100 |          10 | B             |
|           100 |          10 | C             |
|           100 |          11 | A             |
|           100 |          11 | B             |
|           100 |          11 | C             |
|           100 |          11 | C             |
+---------------+-------------+---------------+

したがって、最後の行は受け入れられません。

誰にもアイデアはありますか?

4

1 に答える 1

0

前述のように、3 つすべてを PK として選択できます。または、3 つの列すべてに一意のインデックスを作成することもできます。したがって、これら 2 つのアイデアはコードフリーです。

最後になりましたが、変更前マクロを使用して、テーブル内で検索 (ルックアップ) を実行し、既存のレコードが存在するかどうかを確認できます。これまでのところ、あなたの情報を考えると、おそらく一意のインデックスが最も労力が少なく、PK を 3 つの列すべてに変更する必要はありません (前述のように別の解決策です)。

したがって、変更前のマクロを検討できます。そしてこれを使用します:

Lookup a Record in MyTable
   Where Condition = [z].[Field1]=[MyTable].[Field1] And 
                     [z].[Field2]=[MyTable].[Field2] And 
                     [z].[ID]<>[MyTable].[ID]
   Alias Z
   RaiseError   -123
   Error Description: There are other rows with this data

したがって、データ マクロを使用できます。変更前のテーブル マクロを使用します。検索コードの「内側」にインデントされたレイズ エラー コードがあることを確認してください。また、テーブル名 (MyTable) は既にコンテキスト内にあり、既にデータの現在の行であるため、ルックアップにエイリアスを使用する方法に注意してください。現在の行を区別するエイリアスとして "z" を使用してルックアップします。およびルックアップレコードのそれ。

したがって、学習の観点からは、上記のテーブル マクロを使用できますが、3 つの列すべてに一意のインデックスを設定するだけで作業と労力が軽減される可能性があります。

于 2019-10-05T18:27:26.693 に答える