荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: gary (杀手玫瑰), 信区: Homepage
标  题: 将参数传递到数据访问页
发信站: 荔园晨风BBS站 (Wed Sep 26 20:40:32 2001), 转信

http://www.microsoft.com/china/msdn/library/techart/ODC_passparam.asp

将参数传递到数据访问页

Meyyammai Subramanian
Microsoft Corporation

2001 年 4 月

适用于:
   Microsoft? Access 2002

摘要:本文将阐述如何创建一个接受参数并根据参数值检索记录的页面。

目录
简介
创建一个用于提示参数的页面
创建一个根据特定参数显示记录的页面

简介
参数查询使您可以提示信息,例如在基于查询的窗体或报告中检索记录所用的条件
。您也可以使用 cookie 将参数从一个数据访问页传递到另一个数据访问页。

以下图例显示了“参数”页,该页提示开始和结束日期。



图 1:接受参数的页面

当用户输入有效的开始和结束日期后,如果单击“导航 URL”按钮,“参数结果”
页将打开,显示在开始和结束日期之间的所有记录。



图 2:特定开始和结束日期之间的记录

数据访问页显示了在 1996 年 7 月 1 日和 1996 年 7 月 15 日之间的记录。

创建一个用于提示参数的页面
在“设计”视图中打开一个新的数据访问页。


在页面上添加用于接受用户参数的文本框,然后为其命名。例如,在“参数”页上
将文本框命名为 txtStart 和 txtEnd。


添加一个用于导航到结果页的命令按钮,然后为其命名。例如,在“参数”页中将
按钮命名为 btnNavigate。


向命令按钮的 OnClick 事件添加代码,以写入 cookie 并导航到结果页。
以下是导航到结果页的命令按钮的示例 OnClick 事件。

<SCRIPT language=VBS>
Sub btnNavigate_onClick
Dim pStartingDate
Dim pEndingDate
Dim URL

Const strParm_1 = "StartingDate"
Const strParm_2 = "EndingDate"

URL = "Parameters_Results.htm"
' 文本框中的值存储在 value 属性中,
' 而 bound span 控件将值存储在 InnerText 中。
pStartingDate = txtStart.value
pEndingDate = txtEnd.value

setVariable strParm_1, pStartingDate
setVariable strParm_2, pEndingDate

window.navigate(URL)
End Sub

</SCRIPT>

在单独的全局脚本块中添加函数以写入、读取和删除 cookie。
<SCRIPT language=VBS>
OPTION EXPLICIT
Dim NOT_FOUND
NOT_FOUND = "NOT_FOUND"

Sub SetVariable(strVariableName, varVariableValue)
    Document.Cookie = strVariableName & "=" & varVariableValue
End Sub

Sub KillVariable(strVariableName)
    SetVariable strVariableName, "NULL;expires=Monday, _
                                  01-Jan-95 12:00:00 GMT"
End Sub

Function ReadVariable(strVariableName)
' 在用于查找 cookie 中变量
' 的字符串处理代码中使用这五个变量。
Dim intLocation
Dim intNameLength
Dim intValueLength
Dim intNextSemicolon
Dim strTemp

' 计算变量名的长度和位置。
intNameLength = Len(strVariableName)
intLocation = Instr(Document.Cookie, strVariableName)

' 检查变量名是否存在。
If intLocation = 0 Then
    ' 找不到变量,因此无法读取变量。
    ReadVariable = NOT_FOUND
Else
    ' 获取一个更小的子字符串进行处理。
    strTemp = Right(Document.Cookie, Len(Document.Cookie) _
                                           - intLocation + 1)

    ' 检查并确保找到了完整的字符串,而不仅仅是一个
    ' 子字符串。
    If Mid(strTemp, intNameLength + 1, 1) <> "=" Then
        '啊呀,只找到子字符串,而没有找到完整的字符串。
        ReadVariable = NOT_FOUND

        ' 请注意,当且仅当对其名称为上一个变量
        ' 的子字符串的变量执行搜索时,它会错误地给出
        ' “未找到”的结果。例如,这将会导致
        ' 失败:
        ' 搜索:MyVar
        ' Cookie 包含:MyVariable=2;MyVar=1

    Else
        ' 找到完整的字符串。
        intNextSemicolon = Instr(strTemp, ";")

        ' 如果未找到,则获取 cookie 的最后一个元素。
        If intNextSemicolon = 0 Then intNextSemicolon = Len(strTemp) _
                                                                  + 1

        ' 检查空变量 (Var1=;)。
        If intNextSemicolon = (intNameLength + 2) Then
            ' 变量为空。
            ReadVariable = ""
        Else
            ' 正常计算此值。
            intValueLength = intNextSemicolon - intNameLength – 2
            ReadVariable = Mid(strTemp, intNameLength + 2, _
                                                  intValueLength)
        End If
    End If
End If
End Function
</SCRIPT>

创建一个根据特定参数显示记录的页面
在“设计”视图中打开一个新的数据访问页。


在页面上添加所需字段。


在结尾的 <HEAD> 前添加代码,以读取 cookie 并检索与指定参数相匹配的记录。

以下是“参数结果”页所使用的示例脚本。该脚本从“Employee Sales by
Country”查询中检索在开始和结束日期之间的记录。

<SCRIPT language=VBScript>

Dim pStartingDate
Dim pEndingDate
Dim errNot_Found
errNot_Found = "NOT_FOUND"
pStartingDate = ReadVariable("StartingDate")
pEndingDate = ReadVariable("EndingDate")

If ((pStartingDate = errNot_Found) or _
                   (pEndingDate = errNot_Found)) Then
    pStartingDate = inputbox("请输入一个开始日期:", _
                   "开始日期")
    pEndingDate = inputbox("请输入一个结束日期:","结束日期")
End If

' 以下是 Jet 语法,用于将参数值添加到
' 数据源控件。
MSODSC.RecordsetDefs("Employee Sales by Country").parametervalues _
                               .Add "[Starting Date]", pStartingDate
MSODSC.RecordsetDefs("Employee Sales by Country").parametervalues _
                               .Add "[Ending Date]", pEndingDate

' 删除 cookie。
document.cookie = ""

' 以下是 SQL Server 语法,用于将参数值添加到
' 数据源控件。
' document.msodsc.recordsetdefs(0).parametervalues.Add "&ParmName", _
' parameter_value

</SCRIPT>

向页面脚本添加函数以写入、读取和删除 cookie。
<SCRIPT language=VBS>
OPTION EXPLICIT
Dim NOT_FOUND
NOT_FOUND = "NOT_FOUND"

Sub SetVariable(strVariableName, varVariableValue)
    Document.Cookie = strVariableName & "=" & varVariableValue
End Sub

Sub KillVariable(strVariableName)
    SetVariable strVariableName, "NULL;expires=Monday, 01-Jan-95 _
                                                 12:00:00 GMT"
End Sub

Function ReadVariable(strVariableName)
' 在用于查找 cookie 中变量的字符串
' 处理代码中使用这五个变量。
Dim intLocation
Dim intNameLength
Dim intValueLength
Dim intNextSemicolon
Dim strTemp

' 计算变量名的长度和位置。
intNameLength = Len(strVariableName)
intLocation = Instr(Document.Cookie, strVariableName)

' 检查是否存在变量名。
If intLocation = 0 Then
    ' 找不到变量,因此无法读取变量。
    ReadVariable = NOT_FOUND
Else
    ' 获取一个更小的子字符串进行处理。
    strTemp = Right(Document.Cookie, Len(Document.Cookie) _
                                           - intLocation + 1)

    ' 检查并确保找到了完整的字符串,而不仅仅是一个
    ' 子字符串。
    If Mid(strTemp, intNameLength + 1, 1) <> "=" Then
        ' 啊呀,只找到子字符串,而没有找到完整的字符串。
     ReadVariable = NOT_FOUND

        ' 请注意,当且仅当对其名称为上一个变量
        ' 的子字符串的变量执行搜索时,它会错误地给出
        ' “未找到”的结果。例如,这将会导致
        ' 失败:
        ' 搜索:MyVar
        ' Cookie 包含:MyVariable=2;MyVar=1

    Else
        ' 找到完整的字符串。
        intNextSemicolon = Instr(strTemp, ";")

        ' 如果未找到,则获取 cookie 的最后一个元素。
        If intNextSemicolon = 0 Then intNextSemicolon = Len(strTemp) _
                                                                   + 1
        ' 检查空变量 (Var1=;)
        If intNextSemicolon = (intNameLength + 2) Then
            ' 变量为空。
            ReadVariable = ""
        Else
            ' 正常计算此值。
            intValueLength = intNextSemicolon - intNameLength – 2
            ReadVariable = Mid(strTemp, intNameLength + 2, _
                                                 intValueLength)
        End If
   End If
End If
End Function


--
   I Believe I Can ...
_____________________________________________________
欢迎光临我的主页          Netdreams!
Http://netdreams.yeah.net

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.85]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店