access类似Dlookup功能的扩展函数-效率更高
- 2019-10-09 17:53:00
- Allen Browne 翻译
- 4362
在access中,有几个D开头的域聚合函数。可以非常方便地获取数据。比如Dlookup,可以指定记录集内获取特定字段的值
但是Dlookup也有很多问题。
1. 只能返回找到的第一个匹配项。由于无法指定排序顺序,因此结果可能是不对的。
2. Dlookup性能很差。
3. 不能自动清理(可能导致 没有足够的数据库或者表 错误)。
4. 如果目标字段包含长度为零的字符串,将返回错误的结果。
使用下面函数,不紧添加可选参数允许您指定排序顺序还提高查找效率
Public Function ELookup(Expr As String, Domain As String, Optional Criteria As Variant, _ Optional OrderClause As Variant) As Variant On Error GoTo Err_ELookup 'Purpose: Faster and more flexible replacement for DLookup() 'Arguments: Same as DLookup, with additional Order By option. 'Return: Value of the Expr if found, else Null. ' Delimited list for multi-value field. 'Author: Allen Browne. allen@allenbrowne.com 'Updated: December 2006, to handle multi-value fields (Access 2007 and later.) 'Examples: ' 1. To find the last value, include DESC in the OrderClause, e.g.: ' ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC") ' 2. To find the lowest non-null value of a field, use the Criteria, e.g.: ' ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname") 'Note: Requires a reference to the DAO library. Dim db As DAO.Database 'This database. Dim rs As DAO.Recordset 'To retrieve the value to find. Dim rsMVF As DAO.Recordset 'Child recordset to use for multi-value fields. Dim varResult As Variant 'Return value for function. Dim strSql As String 'SQL statement. Dim strOut As String 'Output string to build up (multi-value field.) Dim lngLen As Long 'Length of string. Const strcSep = "," 'Separator between items in multi-value list. 'Initialize to null. varResult = Null 'Build the SQL string. strSql = "SELECT TOP 1 " & Expr & " FROM " & Domain If Not IsMissing(Criteria) Then strSql = strSql & " WHERE " & Criteria End If If Not IsMissing(OrderClause) Then strSql = strSql & " ORDER BY " & OrderClause End If strSql = strSql & ";" 'Lookup the value. Set db = DBEngine(0)(0) Set rs = db.OpenRecordset(strSql, dbOpenForwardOnly) If rs.RecordCount > 0 Then 'Will be an object if multi-value field. If VarType(rs(0)) = vbObject Then Set rsMVF = rs(0).Value Do While Not rsMVF.EOF If rs(0).Type = 101 Then 'dbAttachment strOut = strOut & rsMVF!FileName & strcSep Else strOut = strOut & rsMVF![Value].Value & strcSep End If rsMVF.MoveNext Loop 'Remove trailing separator. lngLen = Len(strOut) - Len(strcSep) If lngLen > 0& Then varResult = Left(strOut, lngLen) End If Set rsMVF = Nothing Else 'Not a multi-value field: just return the value. varResult = rs(0) End If End If rs.Close 'Assign the return value. ELookup = varResult Exit_ELookup: Set rs = Nothing Set db = Nothing Exit Function Err_ELookup: MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.number Resume Exit_ELookup End Function
使用Elookup,类似dlookup的功能,获取表中对应的值
Access数据库自身
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
文章分类
联系我们
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |