filter和where子句之间的区别

时间:2011-06-21 09:07:06

标签: ms-access vba ms-access-2007 access-vba

我总是使用我的Access应用程序..

据我所知,当我执行一个sql子句到我的后端(accdb文件)时,说

SELECT * FROM tbl WHERE id=1;

它在后端被过滤,然后只有一条记录通过网络传输。

我的问题是,当我使用过滤器参数打开一个带有查询(没有where子句)的表单时,比如

DoCmd.OpenForm "Form",,, strFilter

网络上传输了多少条记录?它们像sql子句一样被过滤,或者在本地过滤,这意味着必须通过网络发送大量数据?

我很关心这个,因为我有许多子表单与查询绑定,然后我用filter参数在主表单中打开它们。当然,这里的网络不是很好。

编辑:我的应用程序的环境是在没有本地服务器的工厂。所有的网络/信息都在300公里以外的公司总部,也许是广域网。 除了升级到SQL服务器之外,我还有其他解决方案可以让它更可靠吗?我听说过“ Citrix ”,我的系统托盘中碰巧有'Citrix Neighborhood Agent Program',它可以托管我的应用程序以加快速度吗?

3 个答案:

答案 0 :(得分:2)

DoCmd.OpenForm "Form",,, strFilter

在网络上传输了多少条记录?

与strFilter条件匹配。因此,如果WHERE id=1在先前的SELECT查询中返回一行,并且strFiler =“id = 1”,那么OpenForm将打开包含该行作为其记录源的表单。

WhereCondition参数也可用于DoCmd.OpenReport,其操作方式与OpenForm相同,您也可以使用它。

编辑:您应该有一个索引来支持WHERE标准,无论您是将其构建到查询中,还是使用OpenForm WhereCondition“ad hoc”执行此操作。使用索引,数据库引擎将读取索引以查找哪些行匹配,然后检索这些行。因此,与强制引擎读取每一行以确定哪些包含匹配相比,检索将更有效,因此更快。

答案 1 :(得分:1)

当Jet / ACE从文件服务器请求数据时,它首先需要的是数据库头信息,它具有描述数据文件结构的数据结构。这是在Access会话中请求一次的信息,所以这只是启动时的一个问题。

当您再请求记录时,Jet / ACE使用它有关该文件的元数据来请求所涉及的表的相关索引页,然后使用这些索引来确定要请求的最小数据页数。

通过对主键进行适当的结构化索引和过滤,检索到的数据量实际上非常小。

然而,它仍将不仅仅能够在WAN上实现适当的响应时间。 Access的设计目的是在有线局域网中使用,早在网络标准为10BaseT(10Mbps)的时候。任何不足之处,你都会有问题。 WiFi也在外面,但不是因为带宽,而是因为连接的不可靠性。

当您需要远程支持用户时,最简单的解决方案是在Windows终端服务器上托管Access应用程序。 WTS基于Citrix许可的技术构建,因此您经常会将整个概念视为Citrix,但您的默认WTS设置与Citrix安装完全不同。您必须为Citrix支付额外费用,它会为您提供许多不同的功能。

我在许多环境中都使用了没有Citrix的WTS,坦率地说无法看到Citrix的理由是什么(除非你必须支持大量的远程用户,即在100或更多的范围内)。 WTS安装在从Windows 2000开始的每个Windows Server上,并且非常易于设置和配置。

在我看来,第二个最简单的解决方案是将后端升级到服务器数据库,然后重写以提高效率,以确保您尽可能多地使用服务器,而不是通过网络提取太多数据。 / p>

第三种解决方案是Sharepoint,但我对此没有经验。这绝对是MS在分布式设置中推动Access应用程序的方向,但它非常复杂并且具有很多功能。如果没有大量的准备工作和重要的企业支持,我不会建议深入研究。

答案 2 :(得分:0)

实际上,使用Access,并没有真正的后端,因为有一个真正的客户端 - 服务器引擎,如SQL Server或Oracle或Postgres。 Access使用共享文件体系结构,其中客户端程序本身“拥有”磁盘上的文件块,不同于消息传递体系结构,其中客户端程序将数据请求发送到在服务器上运行的后端引擎进程。该流程“拥有”数据。 使用共享文件,所有工作都在客户端上进行,因此如果数据库文件位于不同的计算机上,则可以通过网络传输货运列车数据

当您向Access请求数据时,它通常会从磁盘上的MDB文件中读取更多数据,并在本地客户端缓存比您的语句所要求的数据更多的数据。 Access尝试智能地执行此操作,预测您的需求。 “现在我在这里”,Access说道,“我不妨让昂贵的磁盘之旅值得一试,并抓住一大堆数据”。别误会我的意思。我不是一个Access basher并且已经使用它超过10年,从LAN带宽为10mbit / sec的那些日子开始。访问对某些事情非常好。但Access可以像你不相信那样吞噬带宽。

阅读Access中的“keysets”。

P.S。蒂姆和蒂姆不同,他给你发了一条评论。

一些有用的链接:

  http://msdn.microsoft.com/en-us/library/dd942824(v=office.12).aspx
  http://support.microsoft.com/kb/209126
  http://support.microsoft.com/kb/112112
  http://support.microsoft.com/kb/128808