有谁在ACCESS中用SQL成功建立可 级联更新UPDATE CASCADE 和 级联删除DELETE CASCADE的的SQL。

时间:2021-02-17 03:38:53
在ACCESS2003中的帮助文件中,称在CONSTRAINT子句后面可以加 ON UPDATE SET NULL,ON DELETE SET NULL,ON UPDATE CASCADE,ON DELETE CASCADE,但似乎ACCESS在CONSTRAINT后一见到有ON就叫语法错误了,我反复试了多种写法都无效。有谁成功过?还有ACCESS有BUG?

高分求教!!!!!!!!!!!!

13 个解决方案

#1


示例:
ALTER TABLE tblShipping 
ADD CONSTRAINT FK_tblShipping 
FOREIGN KEY (CustomerID) REFERENCES 
tblCustomers (CustomerID) 
ON UPDATE CASCADE 
ON DELETE CASCADE

#2


帮顶!

#3


wwwwb() ( ):
你的此法有实际运行过吗?
我的用法完全相同,但运行只要一见到ON是叫语法错误!不管是ON什么!我仔细看我写的SQL,及HELP文件里的说明,我并没有发现我的语句有什么错误。

#4


可能是Access的bug吧

#5


运行过,没有问题。

#6


to wwwwb():

示例:
ALTER TABLE tblShipping 
ADD CONSTRAINT FK_tblShipping 
FOREIGN KEY (CustomerID) REFERENCES 
tblCustomers (CustomerID) 
ON UPDATE CASCADE 
ON DELETE CASCADE

这句提示“CONSTRAINT 子句语法错误”。

#7


用ADO执行试试。

#8


上述问题我问过微软的中国部的工程师,他们解释为上述代码是针对 ADP 的 ANSI 92 规范的。

在 MDB 中无法应用。

不过我不是很相信中国的工程师

#9


贴给你我和微软的EMAIL

根据您的描述,我对您问题的理解是: 您想知道如何在Access 2003中使用ON UPDATE CASCADE/ ON DELETE CASCADE,ON UPDATE SET NULL/ ON DELETE SET NULL。
 
根据我的测试,ON UPDATE CASCADE/ ON DELETE CASCADE 能够在adp 数据库和ANSI92 mdb数据库中正常使用,然而,ON UPDATE SET NULL/ ON DELETE SET NULL在adp 数据库和ANSI92 的mdb数据库中都提示语法错误。
 
以下的信息供您参考:
 
第一步:把mdb数据库设为ANSI92数据库
=========================
1. 打开mdb数据库
2. 点击Tools -> Options -> Tables/Queries -> SQL Server Compatible Syntax (ANSI92) -> This database -> OK. 
 
 
 
第二步:在adp 或ANSI92 mdb数据库中使用ON UPDATE CASCADE/ ON DELETE CASCADE:
 
方法一:在Query Designer 中创建存储过程
-----------------------------------------------
1. 打开adp 数据库。
2. 点击Objects 下的Queries
3. 创建一个新的存储过程StoredProcedure1, 切换到SQL View. 输入以下代码:
 
Create PROCEDURE StoredProcedure1
 
AS
 
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))
 
RETURN 
 
4. 创建新的存储过程StoredProcedure2, 切换到SQL View. 输入以下代码:
 
 
CREATE PROCEDURE StoredProcedure2
AS
          
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE)
 
RETURN 
 
注意: 如果是mdb 数据库,那应该创建两个新的Query.
 
Query1 为以下代码:
 
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))
 
Query2 为以下代码:
 
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE)
 
 
 
方法二:创建新的module 并输入以下代码:
------------------------------------------
 
Function test()
              
 
           Dim sqlstr As String
 
           Dim conn As ADODB.Connection
 
           Set conn = CurrentProject.Connection
            
 
            sqlstr1 = " CREATE TABLE Customers1 (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))"
 
            sqlstr2 = "CREATE TABLE Orders1 (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId1 FOREIGN KEY (custid) REFERENCES customers1 ON UPDATE CASCADE ON DELETE CASCADE )"
 
 
            conn.Execute sqlstr1
            
            conn.Execute sqlstr2
            
 
            Application.RefreshDatabaseWindow
 
            conn.Close
 
End Function
 
我将会继续测试ON UPDATE SET NULL/ ON DELETE SET NULL. 如果有新的进展, 我会尽早让您知道. 
[/CHAPTER]

#10


这个问题我已经追了一年了,没下文

#11


changechange:

三颗星就是不一样,用此法问题解决,我现在还不需要SET NULL。
 THANKS!!!!!!!!!

#12


学习ing

#13


很高兴,见者有分!!!

#1


示例:
ALTER TABLE tblShipping 
ADD CONSTRAINT FK_tblShipping 
FOREIGN KEY (CustomerID) REFERENCES 
tblCustomers (CustomerID) 
ON UPDATE CASCADE 
ON DELETE CASCADE

#2


帮顶!

#3


wwwwb() ( ):
你的此法有实际运行过吗?
我的用法完全相同,但运行只要一见到ON是叫语法错误!不管是ON什么!我仔细看我写的SQL,及HELP文件里的说明,我并没有发现我的语句有什么错误。

#4


可能是Access的bug吧

#5


运行过,没有问题。

#6


to wwwwb():

示例:
ALTER TABLE tblShipping 
ADD CONSTRAINT FK_tblShipping 
FOREIGN KEY (CustomerID) REFERENCES 
tblCustomers (CustomerID) 
ON UPDATE CASCADE 
ON DELETE CASCADE

这句提示“CONSTRAINT 子句语法错误”。

#7


用ADO执行试试。

#8


上述问题我问过微软的中国部的工程师,他们解释为上述代码是针对 ADP 的 ANSI 92 规范的。

在 MDB 中无法应用。

不过我不是很相信中国的工程师

#9


贴给你我和微软的EMAIL

根据您的描述,我对您问题的理解是: 您想知道如何在Access 2003中使用ON UPDATE CASCADE/ ON DELETE CASCADE,ON UPDATE SET NULL/ ON DELETE SET NULL。
 
根据我的测试,ON UPDATE CASCADE/ ON DELETE CASCADE 能够在adp 数据库和ANSI92 mdb数据库中正常使用,然而,ON UPDATE SET NULL/ ON DELETE SET NULL在adp 数据库和ANSI92 的mdb数据库中都提示语法错误。
 
以下的信息供您参考:
 
第一步:把mdb数据库设为ANSI92数据库
=========================
1. 打开mdb数据库
2. 点击Tools -> Options -> Tables/Queries -> SQL Server Compatible Syntax (ANSI92) -> This database -> OK. 
 
 
 
第二步:在adp 或ANSI92 mdb数据库中使用ON UPDATE CASCADE/ ON DELETE CASCADE:
 
方法一:在Query Designer 中创建存储过程
-----------------------------------------------
1. 打开adp 数据库。
2. 点击Objects 下的Queries
3. 创建一个新的存储过程StoredProcedure1, 切换到SQL View. 输入以下代码:
 
Create PROCEDURE StoredProcedure1
 
AS
 
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))
 
RETURN 
 
4. 创建新的存储过程StoredProcedure2, 切换到SQL View. 输入以下代码:
 
 
CREATE PROCEDURE StoredProcedure2
AS
          
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE)
 
RETURN 
 
注意: 如果是mdb 数据库,那应该创建两个新的Query.
 
Query1 为以下代码:
 
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))
 
Query2 为以下代码:
 
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE)
 
 
 
方法二:创建新的module 并输入以下代码:
------------------------------------------
 
Function test()
              
 
           Dim sqlstr As String
 
           Dim conn As ADODB.Connection
 
           Set conn = CurrentProject.Connection
            
 
            sqlstr1 = " CREATE TABLE Customers1 (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING(50))"
 
            sqlstr2 = "CREATE TABLE Orders1 (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId1 FOREIGN KEY (custid) REFERENCES customers1 ON UPDATE CASCADE ON DELETE CASCADE )"
 
 
            conn.Execute sqlstr1
            
            conn.Execute sqlstr2
            
 
            Application.RefreshDatabaseWindow
 
            conn.Close
 
End Function
 
我将会继续测试ON UPDATE SET NULL/ ON DELETE SET NULL. 如果有新的进展, 我会尽早让您知道. 
[/CHAPTER]

#10


这个问题我已经追了一年了,没下文

#11


changechange:

三颗星就是不一样,用此法问题解决,我现在还不需要SET NULL。
 THANKS!!!!!!!!!

#12


学习ing

#13


很高兴,见者有分!!!