具有 500,000 行的表很小 - 即使对于 Access。您所做的任何搜索都应该在不到 1 秒的时间内给出结果!
解决这个问题的最佳方法是在公交车站问一位 90 岁的女士以下问题:
当您使用即时取款机时,下载每个帐户然后询问用户帐号是否有意义?即使是公交车站的 90 岁老太太也会告诉你,最好询问帐号然后下载 1 条记录!
当您使用 Google 时,您不会下载整个互联网然后询问用户要搜索什么。或者你创建一个巨大的网页然后你说使用 ctrl+f 来搜索那个巨大的浏览器页面。
因此,请考虑一下所有软件的工作原理。该软件不会在本地下载和准备所有数据,然后询问您要查找的内容。你反其道而行之!
所以这里的简单解决方案是在您开始从服务器提取数据之前询问用户。构建一个如下所示的表单:
然后,为了匹配搜索(比如 LastName),您可以在
文本框更新后。
Dim strSQL As String
strSQL = "select * from tblCustomers where LastName like '" & Me.txtLastName & "*'"
Me.RecordSource = strSQL
这样,表单只会提取您需要的数据——即使有 1000 万行,这种方法也会在您的计算机上即时运行。上面使用了“*”,因此只需要输入 LastName 的前几个字符。结果是一种“选择”的形式,然后您可以通过单击上面的“眼镜”按钮来跳转或编辑一条记录。只需启动 + 打开一个详细信息表单。代码是:
docmd.OpenForm "frmCustomer",,,"id = " & me!id
让我们再回答几个问题:
速度有区别吗? (ODBC 驱动程序)
不,驱动程序的性能确实没有差异 - 它们的性能都差不多,用户可能永远不会看到或注意到使用不同驱动程序时的性能差异。
例如 2014 与 2008。使用 ODBC 时,2014 是否比 2008 快?
通常不会。我的意思是想一想您对计算机的任何经验(除非您是计算机新手?)。每次升级到新的 Word 或新的会计程序时,该程序都会变得更大、加载时间更长、使用更多内存、使用更多磁盘空间,并且几乎总是使用更多处理。因此,鉴于过去 30 年的台式计算机,几乎在所有情况下,下一个较新版本的软件都需要更多的内存、更多的磁盘、更多的处理,因此运行速度比该软件的先前版本慢(我愿意是你的知识和经验 - 因此较新的版本往往不会运行得更快 - 在计算机历史上存在一些“罕见”的例外情况,但任何软件的较新版本往往需要更多的计算机资源,而不是更少。
现在一位用户告诉我,有时,如果 TS 上的用户不多,Access 会快得多。什么意思?
以上与 ODBC 驱动无关。在上述上下文中,当您使用终端服务器时,数据库应用程序和前端 (Access) 都在同一台计算机/服务器上运行。这意味着从服务器到应用程序的数据传输速度非常快,并且不是以网络速度发生的,而是以计算机速度发生的(因为数据库和应用程序都在同一台服务器上运行)。您可以在每台计算机上安装 Access,然后让 Access 通过网络将数据从服务器拉到客户端工作站——这很慢,因为有网络。使用 TS,应用程序和服务器运行速度非常快,中间没有网络。应用程序和服务器的海量处理和速度可以协同工作——一旦提取数据并渲染屏幕,则只有屏幕数据通过网络线路传输。因此,结果比在每个工作站上运行 Access 快得多。
有时,如果 TS 上的用户不多,
正确,由于用户应用程序正在服务器上运行,因此应用程序和 SQL 服务器之间不存在网络。但是,由于每个用户都在服务器上运行他们的应用程序(而不是每个工作站计算机),因此服务器上需要更多的负载和资源。如果许多用户正在使用该服务器,那么该服务器现在的工作量很大,因为该服务器必须运行 SQL Server 并为该服务器上运行的每个 Access 副本分配内存和处理。
传统设置意味着 Access 在每台计算机上运行。因此,运行 Access 的内存和 CPU 发生在每个工作站上——服务器不必为 Access 提供 CPU 和内存,服务器只运行 SQL 服务器并为来自每个工作站的数据请求提供便利。但是,由于网络比在一台计算机上处理数据要慢得多,因此您的瓶颈不是在处理,而是非常有限的网络速度。由于 Access 和 SQL 以及所有处理都发生在服务器上,因此更容易使该服务器的资源和容量过载。但是,网络速度通常是计算机设置中最慢的链接。由于所有处理和数据处理都发生在服务器端,因此只有 RESULTING 屏幕和显示通过网络线路发送。如果计算机软件必须处理 100 万行数据,然后显示一个总结果,那么只有 1 个总结果从显示的网络线路上下来。如果您在每个工作站上本地运行 Access 并处理 100 万行,则必须有 100 万行数据通过网络管道(但是,您可以修改您的 Access 设计以使 SQL 服务器在数据通过网络之前首先处理数据管道来避免这个问题。但是使用 TS,因为 Access 没有在您的计算机上运行,所以您不必担心网络流量 – 但您仍然必须担心 Access 从 SQL 服务器获取多少数据 – 因此上述关于仅加载的提示您需要的数据到表单中。因此,不要将大量数据集加载到 Access 表单中,而只需在开始从 SQL 服务器中提取数据之前询问用户。