访问2010 vba数组与查询

时间:2013-12-31 20:16:18

标签: sql arrays vba ms-access vpn

我在工作中维护一个Access DB,用于发送每小时的员工生产力更新。目前我将表单排列成列:第一列包含一个ComboBox,我们可以从中选择一个员工的姓名。选择名称后,下一列将自动使用代理的员工ID(TID)填写此代码:

        AgentName = rs.Fields("AgentName")

        sqlString2 = "SELECT * FROM " & "AllAgents WHERE FullName ='" & AgentName & "'"
        rs2.Open sqlString2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

        AgentTID = rs2.Fields("TID").Value

        rs2.Close

在公司网络办公室工作时一切正常,但我发现在使用此表单时,通过VPN工作会导致可怕的减速。缓慢是我与VPN永远战斗的一个问题,但在这种情况下,我有一个想法,可能潜在的缓慢,我想知道在我遇到麻烦之前我是否正确重新编码一切。

我的想法是,我可以在VBA中创建一个数组,该数组将填充代理商'名字和首次加载表单时的ID,或者甚至在每台个人笔记本电脑上打开数据库时的ID。然后,数据库只需要从“AllAgents”中读取数据。表一次,可以简单地使用数组作为源。我所知道的是,这是否会产生影响。基本上,如果Access DB保存到网络驱动器上并通过VPN访问,那么阵列是否会存储在笔记本电脑的RAM中?如果是的话,我认为这样可以缓解速度问题,并且值得花时间重新编码。

谢谢,

1 个答案:

答案 0 :(得分:2)

Access中关于表单级或全局变量的事情是,您最好在应用程序中进行良好的错误处理。如果发生未捕获的错误,则可能导致这些变量缺少更好的单词。结果是下次尝试访问数组中的数据时,会出现另一个异常。

在进入阵列路线之前,您可以尝试以下几点:

  • 您的组合框可能不需要直接绑定到记录集rs。将设计时组合框的源设置为基础查询或表。
  • 这样就可以使用以下内容简单地引用组合框的绑定字段:AgentName = cboAgentName.Value

(如果您可以从表单中删除不必要的记录集对象,那么从长远来看,这将是更好的选择)

  • 您的查找代码不需要使用SELECT *。这在生产代码中使用并不是一个好习惯。相反,请使用SELECT TID。基本上,只在查询中返回您实际需要的字段。
  • 您不需要使用adOpenKeySet选项,这是不必要的开销。您应该可以使用adOpenForwardOnly

我还建议查看AllAgents表以确保在用于查找的字段上有索引。如果没有,请考虑添加一个。

您仍然可能需要使用阵列路由,但这些是相对简单的事情,您可以使用它们来尝试解决性能问题,而不会对应用程序进行大量的代码更改。