access函数_ACCESS中的DLookUp函数是如何运算的?
?一、DLookUp函數介紹
1. DLookUp函數的用途:可以用于從指定集合(一個域)中獲取符合條件的特定字段的值。
2. DLookUp函數的格式為:DLookUp( expr , domain , [criteria] )
其中:
expr 為字段名,或以字段名為基礎的表達式字符串
domain 為記錄集,可以是表名,也可以是不需要參數的選擇(聯合)查詢
[criteria] 為取值范圍,即數據的限定條件
3. DLookUp函數最終的運行結果為:domain記錄集中,符合[criteria](范圍)條件的,expr字段的值或基于expr字段值的表達式的運算結果。
例題:
表[學生]中有[學號]和[姓名]2個字段,其中[學號]為唯一主鍵,現要求獲取表[學生]中[學號]為“XS001”的學生的[姓名]
解答:DLookUp("姓名","學生","學號= 'XS001' ")
二、DLookUp函數中的SQL查詢邏輯
通過對DLookUp函數的運算邏輯進行分析,我們可以將DLookUp函數中的各個參數轉化為SQL查詢語句的構成部分。
其中:
expr 為SQL語句的 SELECT 部分,即指定的唯一字段
domain 為SQL語句的 FROM 部分,即選定的記錄集(表來源)
[criteria] 為SQL語句的 WHERE 部分,即特定的數據范圍
如此一來,上文中例題的DLookUp語句則可以理解為以下SQL語句:
SELECT 姓名 FROM 學生 WHERE 學號= "XS001"
當然,這是一種簡單化的理解。假設表[學生]中的[學號]不是唯一主鍵的情況下呢?也就是說,可能存在[學號]相同的多個[姓名],但是DLookUp函數又必須只返回一個值,這種情況是如何處理的?
微軟在Access中關于DLookUp函數的處理邏輯是返回第一個值。
因此,上述SQL語句可以進一步完善為:
SELECT TOP 1 姓名 FROM 學生 WHERE 學號= "XS001"
轉化為通用格式,則是:
DLookUp(expr, domain, [criteria])
等價于
SELECT TOP 1 expr FROM domain WHERE [criteria]
三、將SELECT子查詢轉化為DLookUp運算結果的VBA邏輯
基于DLookUp函數中的SQL查詢邏輯分析,我們可以逆向推導微軟在將VBA封裝進Access中時,關于DLookUp函數的運算過程如下:
Public Function DLookUp(ByVal expr As String, ByVal domain As String, ByVal criteria As String) As Variant
On Error GoTo DLookUp_err
Dim SQL As String, rst
SQL = "SELECT TOP 1 " & expr & " FROM " & domain & " WHERE " & criteria
Set rst = CurrentDb.OpenRecordset(SQL)
DLookUp = rst(expr)
Exit Function
DLookUp_err:
DLookUp = "#錯誤"
End Function
四、DLookUp函數的發散運用
在Access數據庫中,微軟通過VBA封裝DLookUp函數為我們提供了獲取SELECT子查詢語句結果的快捷方式。
而在SQL Server等其他數據庫中沒有DLookUp函數可以使用,雖然可以使用SELECT子查詢的方式來解決,如此一來在編寫SQL查詢時,SQL語句將會顯得十分冗長和復雜。
但基于上文分析,我們已經掌握了將SELECT子查詢語句轉化為DLookUp函數運算結果邏輯,據此我們在VB.Net、C++、ASP、PHP等程序語言中,其實可以自行封裝一個類DLookUp函數,在連接SQL Server(或其他數據庫)時方便調用,簡化SQL語句。
總結
以上是生活随笔為你收集整理的access函数_ACCESS中的DLookUp函数是如何运算的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arraylist从大到小排序_经典排序
- 下一篇: 学好英语网首页制作_没有美术基础的新手小