【问题标题】:DAO Recordset vs Numerous DlookupsDAO 记录集与众多 Dlookup
【发布时间】:2016-10-28 15:27:20
【问题描述】:

我为一家小型企业创建了一个访问数据库。在这个数据库中,我经常使用 VBA 根据关键字段自动填充一些文本框:

me.textboxvalue0.value = Nz(DLookup("VALUE0", "tblsomething", "lookedfield = '" & Me.keyfield.Value & "'"), "")  
me.textboxvalue1.value = Nz(DLookup("VALUE1", "tblsomething", "lookedfield = '" & Me.keyfield.Value & "'"), "")  
me.textboxvalue2.value = Nz(DLookup("VALUE2", "tblsomething", "lookedfield = '" & Me.keyfield.Value & "'"), "") 

这段代码对我所有的自动填充文本框重复,范围从 2 到 15 个文本框。 我的问题是: 打开 DAO 记录集并找到包含所有字段的特定行是否更快,或者继续使用多个 Dlookup 逐个字段提取该行的字段是否更快(执行时间)。

【问题讨论】:

  • 我将使用带有“select value0,value1,value2 wherelookupfield="me.lookupid 的 ADO 记录集,为您提供更多选项,包括如何操作、放回数据、处理克隆、采取数组,计数等。但它们可以被绑定吗?
  • 记录集肯定更快,但是否值得实施取决于它发生的频率、数据库的大小(将达到)等。
  • @SunKnight0 搜索的表比较小,最多1000条记录。只是一个一个地拉字段对于拉相关行听起来效率低下。可惜 Dlookup 不能返回多个字段。
  • 不使用绑定控件有什么原因吗? -- “遗憾的是 Dlookup 不能返回多个字段。” 这是设计使然,要返回多个字段,您使用一个记录集。
  • @Lybren:实际上它可以,在某种程度上。像这样:DLookup("Field1 & ';' & Field2","Table","Condition"),然后将结果拆分成一个数组。笨重,但如果您必须使用 DLookup 并且无法正确访问该表,这是可能的。

标签: database ms-access vba dao


【解决方案1】:

您可以使用表单的 OnCurrent 事件:

Dim rst As DAO.Recordset
Dim SQL As String

SQL = "Select * From tblSomething Where lookedfield = '" & Me!keyfield.Value & "'")
Set rst = CurrentDb.OpenRecordset(SQL)
If rst.RecordCount > 0 Then
    Me!textboxvalue0.Value = rst!VALUE0.Value
    Me!textboxvalue1.Value = rst!VALUE1.Value
    Me!textboxvalue2.Value = rst!VALUE2.Value
Else
    Me!textboxvalue0.Value = Null
    Me!textboxvalue1.Value = Null
    Me!textboxvalue2.Value = Null
End If
rst.Close

Set rst = Nothing

【讨论】:

  • 感谢您抽出宝贵时间,但这不是问题的答案。这是您使用 DAO 记录集的方式。我需要一个关于 which 更快、多个 dlookup 或 DAO 记录集查找的答案。在 10 到 10000 条记录的表上。
  • 嗯,那么它就是的答案。一个电话总是会更快。另外,这是我真的不明白的问题类型,因为您检查它比写问题要快。只有您拥有对速度有最终影响的数据。
  • 宝贵的见解。我现在将检查如何对访问进行性能测试,因为我从未这样做过。但是,在回答问题时,请用正确的词明确回答。你以“你可以使用”开头,暗示我不知道怎么做;并没有注意到 DAO 会更快。您的评论确实包含答案,“一个电话总是会更快”。因此我会标记你的答案。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多