使用AccessDataSource和ListView ,当我在浏览器中点击del
时显示错误
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>
并用所选表的参数替换它
所以外键问题不受影响
标签现在没有错误,但记录没有被删除
我如何解决这个问题?
答案 0 :(得分:0)
您的第一个查询:
DELETE FROM [tblCustomers] , [tblOrders] WHERE [pkeyCustomerID] = ?
语法无效,你不能同时从两个表中删除,你需要像
这样的东西DELETE FROM [tblOrders] WHERE [pkeyCustomerID] = ?;
DELETE FROM [tblCustomers] WHERE [pkeyCustomerID] = ?;
但是我认为Access不支持多个语句。最好的解决方案是编辑此关系以使用级联删除参照操作触发器。
要做到这一点,请进入Access中的关系:
然后双击tblOrders和tblCustomers之间的关系,这将显示属性。然后取消选中“强制参照完整性”,或者确保选中级联参照操作选项(忽略字段名称,这是我在测试数据库中遇到的第一个关系):
这样可以确保在删除客户时删除所有相关订单。