2

当我在浏览器中点击时使用 AccessDataSource 和 ListViewdel显示以下错误

OleDbException (0x80004005) :无法删除或更改记录,因为表 'tblOrders' 包含相关记录。

我正在尝试通过以下几种方式解决问题

DeleteCommand="DELETE FROM [tblCustomers] , [tblOrders] WHERE [pkeyCustomerID] = ? "

由 ASP 生成的默认命令是

DeleteCommand="DELETE FROM [tblCustomers] WHERE (([pkeyCustomerID] = ?) OR ([pkeyCustomerID] IS NULL AND ? IS NULL)) "

或者

<asp:Parameter Name="pkeyCustomerID" Type="String" /><DeleteParameters> 所选表的参数中删除并替换它,因此外键问题不受影响的标签现在没有错误但记录也没有删除

我该如何解决这个问题?

4

1 回答 1

0

您的第一个查询:

DELETE FROM [tblCustomers] , [tblOrders] WHERE [pkeyCustomerID] = ? 

语法无效,您不能同时从两个表中删除,您需要类似

DELETE FROM [tblOrders] WHERE [pkeyCustomerID] = ?;
DELETE FROM [tblCustomers] WHERE [pkeyCustomerID] = ?;

但是我不认为 Access 支持多个语句。最好的解决方案是编辑此关系以使用级联删除引用操作触发器。

为此,请进入 Access 中的关系:

在此处输入图像描述

然后双击 tblOrders 和 tblCustomers 之间的关系,这将显示属性。然后要么取消选中“强制引用完整性”,要么确保选中级联引用操作选项(忽略字段名称,这是我在测试数据库中遇到的第一个关系):

在此处输入图像描述

这将确保当您删除客户时,您也会删除所有相关订单。

于 2013-08-16T08:01:52.247 回答