4

vb.netアプリケーションによってアクセスされるMS Acess 2007データベースを使用して、2つの既存のテーブルがあります

Members
-------
ID     name     bandID
-----------------------
0      Pierre   1
1      Chart    3
2      John     3
3      Dave     2  

Bands
-----
ID     bandName
----------------
1      Band a
2      Band b
3      Band c

members.bandId と band.ID の関係に cascade to null 制約を追加したい

これは私が持っているものです

ALTER TABLE members ADD CONSTRAINT membresBands_FK
    FOREIGN KEY (bandID) REFERENCE Bands(ID) ON DELETE CASCADE SET NULL

しかし、次のエラー メッセージが表示されます。

CONSTRAINT 句の構文エラー

私が見つけたmsdnから

CREATE TABLE Orders 
  (OrderId INTEGER PRIMARY KEY, 
  CustId INTEGER, 
  OrderNotes NCHAR VARYING (255), 
  CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) 
  REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

MS Access のテーブルを変更して、関係をカスケードに null に設定することは可能ですか?

ありがとうございました!

4

5 に答える 5

5

この種の制約はAccessで作成できますが、JetOLEDBプロバイダーとADOを介してのみ作成できます。たとえば、Accessのデータベースで、次のVBAコードを実行して制約を作成できます。

CurrentProject.Connection.Execute "ALTER TABLE membres ADD CONSTRAINT membresBands_FK FOREIGN KEY (bandID) REFERENCES bands(ID) ON DELETE SET NULL"
于 2012-04-30T17:03:19.770 に答える
1

これを投稿するのに8時間待たなければなりませんでした...

VisualBasicモジュールの使用

'Define the bit value for the relation Attributes.
Public Const dbRelationCascadeNull As Long = &H2000

Public Function MakeRel()
    'Purpose: Create a Cascade-to-Null relation using DAO.
    Dim db As DAO.Database
    Dim rel As DAO.Relation
    Dim fld As DAO.Field

    Set db = CurrentDb()
    'Arguments for CreateRelation(): any unique name, primary table, related table, attributes.
    Set rel = db.CreateRelation("membre_bands", "bands", "membres", dbRelationCascadeNull)
    Set fld = rel.CreateField("ID")  'The field from the primary table.
    fld.ForeignName = "band"           'Matching field from the related table.
    rel.Fields.Append fld                    'Add the field to the relation's Fields collection.
    db.Relations.Append rel                  'Add the relation to the database.


    'Report and clean up.
    Debug.Print rel.Attributes
    Set db = Nothing
End Function

次に、MakeRel関数を呼び出します

http://allenbrowne.com/ser-64.htmlにある関数

于 2012-05-01T00:53:10.197 に答える
0

AFAIK、Cascade to NullAccessにはありません。Cascade DeleteとのみCascade Update

于 2012-04-30T16:10:20.437 に答える
0

Accessのドキュメントによると、次の参照トリガー アクションがサポートされています。

ON DELETE CASCADE
ON UPDATE CASCADE
ON DELETE SET NULL
ON UPDATE SET NULL

...しかし、実際には最初の 3 つしかサポートしていません。つまり、サポートしていませんON UPDATE SET NULL。さらに明確にするために、エンジンはON UPDATE SET NULL参照トリガー アクションをまったくサポートしていません。つまり、DDL 構文だけではありません。

于 2012-04-30T23:46:31.640 に答える
0

さまざまな DBMS で効果をカスケードするためのオプションは次のとおりです。

ON DELETE SET NULL

ON DELETE CASCADE

ON DELETE RESTRICT

ON DELETE NO ACTION

MS-Access には最初の 2 つがあると思います。したがって、次のようになります。

ON DELETE SET NULL

于 2012-04-30T16:07:55.493 に答える