我有 MySQL ODBC 数据源。我有数据表视图表单或 MySQL 视图,它们是通过连接 3 个表并汇总一些数据(总计)而构建的。 假设我的订单视图中包含小计,我需要在简单的数据表视图中查看这些订单的完整列表及其摘要。 在此数据表视图中,我有
cmb
列 order_route
,它们是 routes
MySQL ODBC 表的查找字段。
由于我的 MySQL 视图中的分组数据,我无法对此视图进行任何直接更新。没关系。
我想要做的是 - 我想将此 cmb
列的控制源保留为 vwOrdersDetails
.route_id
但将行源设置为 SELECT routes
.id
,... FROM 路由表。
所以到目前为止,一切都很好 - 我有包含订单及其摘要的网格,并且我有可以展开并选择我想要的路线的组合框。
挑战是当我选择此组合框的值时运行自定义 VBA SQL。我需要禁用此控件的默认更新行为并让它运行我的自定义 VBA 事件。现在我可以运行此 VBA 事件并更新路由,但我不知道如何禁用该内置更新行为,因为它正在尝试更新不可更新的记录集。
附: - 不!我不想制作没有摘要的可更新记录集。我不能强迫用户打开每条记录的配置文件视图只是为了更新路线,因为它需要太多的点击。
我知道迟到的答案,但在 SQL Server 上,我通过在包含数据库中聚合的视图上创建 INSTEAD OF UPDATE 触发器来解决这个问题。 TSQL 中的语法如下所示。
CREATE TRIGGER [AUTH].[tr_Q_SubAccounts_DELETE]
ON [AUTH].[Q_SubAccounts]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(Title)
BEGIN
UPDATE SA
SET
SA.Title = I.Title
FROM
Inserted I
JOIN [AUTH].T_SubAccounts SA ON I.GUID = SA.GUID
END
END
问题在于 MySQL 不允许 INSTEAD OF 触发器,但也许 MySQL 中的数据库级别可能存在另一种构造来模仿这种行为。
这是一个完全不同的主题,您可能应该在实现之前阅读它,但我广泛使用这种模式。