我有一个链接到ODBC(MS SQLServer)的表单,它显示VIEW的结果,当我尝试删除记录时,我调用VBA级别的函数
Form_BeforeDelConfirm(Cancel As Integer, Response As Integer){
If (IsNull(Text104.value) = False) Then
Dim deleteLabel As DAO.QueryDef
Set deleteLabel = CurrentDb.CreateQueryDef("")
deleteLabel.Connect = CurrentDb.TableDefs("KontrollWerte").Connect
If (InStr(QuerySave, "KontrollWerteVIEW") <> 0) Then
deleteLabel.sql = "delete from KontrollWerte_Label where Kontrolle_Label_ID = " & Text104.value
End If
Close
End If
}
显示错误:
[Microsoft][SQL Server Native Client 11.0][SQL Server]视图或函数"dbo. KontrollwerteVIEW"不可更新,因为所做的修改会影响多个基表。(#4450)
这个错误是正常的,因为视图是一个包含多个表的选择。
似乎根本没有调用该函数,并且MS Access的"默认"删除函数正在被调用,有一种方法可以告诉MS Access不要执行默认删除,而是在Form_BeforeDelConfirm函数内部执行我的sql语句?
谢谢!
我试图改变函数调用的时间,但没有成功。
1条答案
按热度按时间js81xvg61#
您必须确保视图允许更新。
当你链接一个表,而它是一个视图?
在创建表链接的过程中,您将看到以下提示:
首先,我们在链接"视图/表"时选择"视图"
请注意,我还选中了"保存密码"选项。
接下来,我们会看到:
不要跳过上面的提示。如果你没有为那个视图选择PK列,那么它将是只读的。
参考:
上面提示保存密码,链接到那个视图时上面提示选择主键?
它不会出现在重新链接,只有当添加一个新的链接!
所以,这就是为什么我声明删除到sql server的链接(不仅仅是重新链接,不仅仅是重新刷新表链接,而是第一次添加是这里的关键说明)。
所以,是的,视图是并且可以是可更新的,但是在Access中的链接过程中,您必须回答上面的提示,否则结果是一个只读表。