access中如何将参数的条件引用为窗体上的控件
以表对象"tReader"为数剧源创建一个参数查询,查找读者的"单位"、"姓名"、"性别"和"职称"四个字段内容。其中"性别"字段的条件为参数,要求引用窗体对象"fTes...
以表对象"tReader"为数剧源创建一个参数查询,查找读者的"单位"、"姓名"、"性别"和"职称"四个字段内容。其中"性别"字段的条件为参数,要求引用窗体对象"fTest"上控件"tSex"的值,所建查询名为"qT4"。
展开
2个回答
展开全部
首先,窗体的记录源有指定好了;
接下来的引用很简单:
me.22=[Forms]![窗体1].[11].
窗体不绑定数据时,只能用DLookUp函数(具体的语法去参考Access帮助)了.
当然还有一种方法 ,就是相当于自己编写的DLookUp函数:确定引用中包含Dao3.6,函数代码如下:
Function MDBRead(theTable As String, theFields As Variant, Optional theWhere As String = "", Optional theType As String = "One") As Variant
'作 用: 根据theWhere参数返回 theTable表 中,指定theFields字段的,一个或全部值
'参 数: theTable 表名;
' theFields 字段名,读取多个字段时,字段间使用逗号(,)间隔
' theWhere 条件
' theType 读取类型,(参数值为“One”时,表示只读取符合theWhere的第一条记录;为“All”时,表示读取符合theWhere的所有记录)
'返回值: -没有找到指定记录则返回 Null One All
' -参数为"One"且字段数为 1 时,MDBRead返回 单个值 单个字段 1 1维
' -如果参数theType 值为 "One"(或参数theType 值为"All",但参数theFidlds只有一个字段)时,MDBRead返回个一维数组 多个字段 1维 2维
' - 返回的一维数组规定:(x) theType为“One”时,x表示字段号;theFields为单个字段时,x表示记录数. 从 0 开始
' - 返回的二维数组规定:(x,y) x.表示记录数,y.表示字段号
'注 意: 函数读取的表均为链接表
Dim rst As Recordset, dimFields As Variant, theTemp() As Variant, theFieldsNum As Byte, i As Long, j As Long, theNum2 As Long
On Error GoTo thErr
'1为记录源;2为多字段数组;4为中间结果;5为计数变量
dimFields = Split(theFields, ",") '得到字段名数组
theFieldsNum = UBound(dimFields) '得到字段个数
theNum2 = DCount("*", theTable, theWhere) '得到符合条件的记录的个数
If theNum2 = 0 Then '如果没有符合条件的记录,则退出本函数
MDBRead = Null
Exit Function
End If
'如果只读一个字段的第一个符合条件的值时,用DlookUp函数
If theFieldsNum = 0 And UCase(theType) = "ONE" Then
MDBRead = DLookup(dimFields(0), theTable, theWhere)
Exit Function
End If
If UCase(theType) = "ONE" Then '根据参数theType来重新规定数组,尽量定义为一维;不允许时,定义2维
ReDim theTemp(theFieldsNum)
ElseIf UCase(theType) = "ALL" And theFieldsNum = 0 Then
ReDim theTemp(theNum2 - 1)
Else
ReDim theTemp(theNum2 - 1, theFieldsNum)
End If
'连接数据库中的链接表
Set rst = CurrentDb.OpenRecordset(theTable, , dbReadOnly)
If theWhere = "" Then rst.MoveFirst Else rst.FindFirst theWhere '根据条件查找记录
'根据参数theType来为中间结果取值
If Not rst.NoMatch And UCase(theType) = "ONE" Then 'theType为One时
For i = 0 To theFieldsNum
theTemp(i) = rst(dimFields(i))
Next i
MDBRead = theTemp
ElseIf Not rst.NoMatch And UCase(theType) = "ALL" Then 'theType为All时
Do
For i = 0 To theFieldsNum
If theFieldsNum = 0 Then
theTemp(j) = rst(dimFields(i))
Else
theTemp(j, i) = rst(dimFields(i))
End If
Next i
If theWhere = "" Then rst.MoveNext Else rst.FindNext theWhere
j = j + 1
Loop Until IIf(theWhere = "", rst.EOF = True, rst.NoMatch)
MDBRead = theTemp
Else
MDBRead = Null
End If
bye:
rst.Close
Set rst = Nothing
Exit Function
thErr:
If err.Number = 2001 Then
MsgBox "内部错误!!!" & vbCrLf & _
"函数 MDBRead() 条件错!" & vbCrLf & _
"引用链表:" & theTable & vbCrLf & _
"引用字段:" & theFields & vbCrLf & _
"引用条件:" & theWhere & vbCrLf & _
"引用类型:" & theType, vbInformation
End If
MDBRead = Null
End Function
这是引用链接表中的内容时使用的,本地表时,请将其中的一句代码:
Set rst = CurrentDb.OpenRecordset(theTable, , dbReadOnly)
改为:
Set rst = CurrentDb.OpenRecordset(theTable, dbOpenDynaset, dbReadOnly)
具体引用时,因为返回的值是数组,所以示例一下:
Dim theTemp as Variant,i as Long
'读取[表1]中[字段1]、[字段2]、[字段3]的全部记录
theTemp =MDBRead("表1","字段1,字段2,字段3",,"All")
if isnull(theTemp) then
MsgBox "没有任何内容啊!~", vbInformation
exit sub
endif
For i=0 to Ubound(theTemp)
msgbox "第 " & I+1 & " 记录:字段1为 " & theTemp(i,0) & " 字段2为 " & theTemp(i,1) & "字段3为 " & theTemp(i,2)
next i
接下来的引用很简单:
me.22=[Forms]![窗体1].[11].
窗体不绑定数据时,只能用DLookUp函数(具体的语法去参考Access帮助)了.
当然还有一种方法 ,就是相当于自己编写的DLookUp函数:确定引用中包含Dao3.6,函数代码如下:
Function MDBRead(theTable As String, theFields As Variant, Optional theWhere As String = "", Optional theType As String = "One") As Variant
'作 用: 根据theWhere参数返回 theTable表 中,指定theFields字段的,一个或全部值
'参 数: theTable 表名;
' theFields 字段名,读取多个字段时,字段间使用逗号(,)间隔
' theWhere 条件
' theType 读取类型,(参数值为“One”时,表示只读取符合theWhere的第一条记录;为“All”时,表示读取符合theWhere的所有记录)
'返回值: -没有找到指定记录则返回 Null One All
' -参数为"One"且字段数为 1 时,MDBRead返回 单个值 单个字段 1 1维
' -如果参数theType 值为 "One"(或参数theType 值为"All",但参数theFidlds只有一个字段)时,MDBRead返回个一维数组 多个字段 1维 2维
' - 返回的一维数组规定:(x) theType为“One”时,x表示字段号;theFields为单个字段时,x表示记录数. 从 0 开始
' - 返回的二维数组规定:(x,y) x.表示记录数,y.表示字段号
'注 意: 函数读取的表均为链接表
Dim rst As Recordset, dimFields As Variant, theTemp() As Variant, theFieldsNum As Byte, i As Long, j As Long, theNum2 As Long
On Error GoTo thErr
'1为记录源;2为多字段数组;4为中间结果;5为计数变量
dimFields = Split(theFields, ",") '得到字段名数组
theFieldsNum = UBound(dimFields) '得到字段个数
theNum2 = DCount("*", theTable, theWhere) '得到符合条件的记录的个数
If theNum2 = 0 Then '如果没有符合条件的记录,则退出本函数
MDBRead = Null
Exit Function
End If
'如果只读一个字段的第一个符合条件的值时,用DlookUp函数
If theFieldsNum = 0 And UCase(theType) = "ONE" Then
MDBRead = DLookup(dimFields(0), theTable, theWhere)
Exit Function
End If
If UCase(theType) = "ONE" Then '根据参数theType来重新规定数组,尽量定义为一维;不允许时,定义2维
ReDim theTemp(theFieldsNum)
ElseIf UCase(theType) = "ALL" And theFieldsNum = 0 Then
ReDim theTemp(theNum2 - 1)
Else
ReDim theTemp(theNum2 - 1, theFieldsNum)
End If
'连接数据库中的链接表
Set rst = CurrentDb.OpenRecordset(theTable, , dbReadOnly)
If theWhere = "" Then rst.MoveFirst Else rst.FindFirst theWhere '根据条件查找记录
'根据参数theType来为中间结果取值
If Not rst.NoMatch And UCase(theType) = "ONE" Then 'theType为One时
For i = 0 To theFieldsNum
theTemp(i) = rst(dimFields(i))
Next i
MDBRead = theTemp
ElseIf Not rst.NoMatch And UCase(theType) = "ALL" Then 'theType为All时
Do
For i = 0 To theFieldsNum
If theFieldsNum = 0 Then
theTemp(j) = rst(dimFields(i))
Else
theTemp(j, i) = rst(dimFields(i))
End If
Next i
If theWhere = "" Then rst.MoveNext Else rst.FindNext theWhere
j = j + 1
Loop Until IIf(theWhere = "", rst.EOF = True, rst.NoMatch)
MDBRead = theTemp
Else
MDBRead = Null
End If
bye:
rst.Close
Set rst = Nothing
Exit Function
thErr:
If err.Number = 2001 Then
MsgBox "内部错误!!!" & vbCrLf & _
"函数 MDBRead() 条件错!" & vbCrLf & _
"引用链表:" & theTable & vbCrLf & _
"引用字段:" & theFields & vbCrLf & _
"引用条件:" & theWhere & vbCrLf & _
"引用类型:" & theType, vbInformation
End If
MDBRead = Null
End Function
这是引用链接表中的内容时使用的,本地表时,请将其中的一句代码:
Set rst = CurrentDb.OpenRecordset(theTable, , dbReadOnly)
改为:
Set rst = CurrentDb.OpenRecordset(theTable, dbOpenDynaset, dbReadOnly)
具体引用时,因为返回的值是数组,所以示例一下:
Dim theTemp as Variant,i as Long
'读取[表1]中[字段1]、[字段2]、[字段3]的全部记录
theTemp =MDBRead("表1","字段1,字段2,字段3",,"All")
if isnull(theTemp) then
MsgBox "没有任何内容啊!~", vbInformation
exit sub
endif
For i=0 to Ubound(theTemp)
msgbox "第 " & I+1 & " 记录:字段1为 " & theTemp(i,0) & " 字段2为 " & theTemp(i,1) & "字段3为 " & theTemp(i,2)
next i
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询