无效的字段名称访问 Web 应用程序
Posted
技术标签:
【中文标题】无效的字段名称访问 Web 应用程序【英文标题】:Invalid Field Name Access Web App 【发布时间】:2015-02-19 15:58:12 【问题描述】:我有一个 Access Web 应用程序,我目前正在尝试为我的一个视图上的一个字段创建一个 OnClick 宏,以便在单击它时会弹出另一个视图以显示特定记录。目前,我的 Where 子句显示为 Where: [DistrictID]=[Districts].[DistrictID]
当我进入应用程序并单击带有宏的字段时,我会弹出一个提示“无效的字段名称'Districts.DistrictID'。”
我能找到的唯一一个提到此错误的网站是:http://blogs.technet.com/b/the_microsoft_access_support_team_blog/archive/2014/08/04/access-app-invalid-field-name-lt-tablename-gt-lt-fieldname-gt-error-when-using-where-clause.aspx
这个网站说这是由于 Where 子句区分大小写。我的 case 完全匹配我的表/字段(我用其他语言编程,所以我总是出于习惯匹配 case)。无论如何,我已经对我的拼写进行了四次检查,甚至将字段名称复制粘贴到我的 Where 子句中。我仍然得到错误。
我有另一个视图,它与另一个完美运行的表/视图执行类似的操作(其中:[ContactID]=[Contacts].[ContactID])。
有谁知道为什么我的 Where 子句不起作用,或者我做错了什么?
如有需要,请提供额外信息:
我会包含照片,但我的数据库中的信息很敏感,所以我会尽力描述相关信息:
我在数据库中有 10 个表。 “地区”是我正在尝试使用的地区。 Districts 表有...相当多的字段,包括 DistrictID、DistrictName、EmailService、SpecialComment 等等。然而,这四个是为包含宏的数据表视图查询的字段。为 SpecialComment 字段触发 OnClick 宏 - 单击时,我希望我的地区列表视图弹出到单击 SpecialComment 的同一地区(特别评论有时会运行很长时间,所以如果它被大小限制切断在数据表中,我希望人们能够阅读其余信息,而无需切换到另一个视图然后在列表中找到该地区)。 District List 视图和查询视图在视图中都有 DistrictID 字段,尽管它是隐藏的。我已经尝试在两个视图中取消隐藏该字段,但它并没有解决问题 - 在此之前我有其他使用 DistrictID 字段的 Where 子句可以正常工作,所以我怀疑它是否会改变任何东西。之前的那些 Where 子句被其他函数替换了,所以我没有参考它们来了解为什么一个有效而这个无效。
【问题讨论】:
您好,对于您尝试使用 OpenPopup 宏操作打开的视图,该视图的记录源是表、保存的查询名称还是嵌入的查询对象?仔细检查,然后让我知道实际的记录来源。 这是一个保存的查询,它选择上面提到的这 4 个字段。一个具有用于电子邮件服务的标准,并且仅与我们提供的一项服务相匹配 - 该视图只是我们向其提供特定类型电子邮件的所有地区的数据表。 如果您尝试打开的视图是基于查询的,那么您必须使用如下语法:[FieldNameHere]=[NameOfQueryHere].[FieldNameInThatQuery] 所以对您来说:[ContactID ]=[NameOfQueryHere].[ContactID] 哎呀,我想我第一次读错了你的帖子——我试图打开的视图不是基于保存的查询,它是一个嵌入式的——不过理论上我可以保存它,如果这不起作用。 杰夫,我确实为该视图自己保存了查询(可能应该在不久前保存,这是我对所有内容的主要视图!)并将 Where 子句更改为 [QueryName] .[DistrictID] 并且成功了!!!非常感谢!请随时写下您的回复作为答案,我会选择它。 :) 【参考方案1】:如果您尝试使用 OpenPopup 宏操作打开的视图有一个保存的查询作为它的记录源,那么您必须使用这样的查询名称:
[FieldNameHere]=[NameOfQueryHere].[FieldNameInThatQuery]
如果您使用的是表名,请在适当的位置替换实际的表名。
有一点需要注意,有时会让人绊倒,如果您尝试打开的视图使用嵌入式查询作为其记录源,则此技术将不起作用。原因是您无法知道 Access 在幕后为 Access 2013 Web 应用程序视图创建的嵌入式查询名称是什么。 (它实际上是一个 GUID 名称。)
我什至不得不在我的书中添加一个特殊的故障排除说明,因为我知道人们会对此感到困惑(第 584 页):
疑难解答 当视图基于嵌入式查询时,为什么尝试将 Where 子句与 OpenPopup 或 ChangeView 操作一起使用时会出错? Access Services 要求 Where 子句包含视图所基于的表或查询名称。当您将嵌入式查询定义为视图的记录源时,Access Services 会创建一个隐藏的系统查询,该查询在导航窗格中不可见。因此,您不能将 Where 子句与 OpenPopup 操作或 ChangeView 操作一起使用来打开基于嵌入查询的视图。要解决此限制,您可以将视图基于已保存的查询对象。请注意,Access Services 也会为摘要视图创建一个隐藏的系统查询作为记录源。这意味着您不能使用 Where 子句参数打开特定记录或记录集的摘要视图。但是,上述解决方法不适用于摘要视图。
【讨论】:
以上是关于无效的字段名称访问 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
尝试发布 Web 应用程序时应用程序中的服务器错误。无效的对象名称“dbo.Employees”