问题描述
我正在访问表单中使用下一个代码,该代码运行良好:
Set db = CurrentDb
Set rs = db.OpenRecordset("Bestandslocaties",dbOpenDynaset)
With rs
.AddNew
![Omschrijving] = OmschrijvingBestand
.Update
End With
我使用Rubberduck代码检查来发现代码质量问题。 它给出了上述代码的问题:'表达式“![Omschrijving]”(第5行)使用了递归bang运算符。如果参数化的默认成员不在对象本身上,并且只能通过首先调用无参数的默认成员才能到达,这将产生误导。 建议的解决方法是用显式访问替换爆炸符号:
.Fields().Item("[Omschrijving]") = OmschrijvingBestand
但是随后Rubberduck报告了这一行:'表达式“ .Fields()”需要默认的成员访问,但是类型“ ACEDAO.DLL; DAO.Fields”没有合适的成员。 建议的解决方法是忽略此问题。
这真的是一个问题吗?如果是这样,除了忽略之外,如何解决此问题。
解决方法
通常显式访问该字段的重写是:
.Fields("Omschrijving") = OmschrijvingBestand
或者:
-
保持不变(代码可以正常工作,如果它没有损坏,请不要修复)。的确,除非您想学习或想要为项目实施特定的代码风格,否则这是首选。
-
完全显示(不要隐式访问.Value)
.Fields("Omschrijving").Value = OmschrijvingBestand
请注意,括号不是字段名称的一部分,因此,如果您使用.
而不是!
,则不应该将其包括在内。
Rubberduck建议进行一次奇怪的重写,因为它不知道除了先获取整个集合然后再访问成员之外,您还可以立即访问该成员。
,属性值必须使用以下语法指定:
![Omschrijving].Value = OmschrijvingBestand