设为首页
加入收藏
联系站长
首页 | 新闻 | 新书 | 专家 | 技巧 | 源码/作品 | 工具/资源 | 商城 | 风采 | 留言 | 论坛 | 网址 | 承接 | 

  没有公告

 您现在的位置: Access/Office中国 >> Office中国/Access中国图书 --《专家门诊——Access开发答疑200问》 
专家门诊——Access开发答疑200问书籍介绍


Office中国/Access中国 图书 Access图书 专家门诊——Access开发答疑200问  总述 经典赏析 目录 光盘内容 常见问题 实例更新 讨论 联系       人气:


New Page 1
   本 书 经 典 内 容 赏 析 
      如何实现左右移动项目的列表框 如何实现通用的Office Xp按钮界面效果
      如何编写传递多个参数给窗体和报表的函数 如何设计可定定义流程图的程序
      如何读取使用插入对象插入的OLE字段的内容 通用的窗体页眉与页脚
   书中其它经典内容
136 如何将数字金额转换为中文金额 66 如何实现带树形结构的组合框和列表框 68 如何实现通用的窗体页眉与页脚 205 能否修改MDE文件窗体和报表的属性 168 如何设计可定定义流程图的程序 81 报表中如何屏蔽零值 163 如何实现拖拉的treeview 166 如何原样打印Treeview中的内容 138 如何将中文字符串转换为首位拼音码 213 不使用第三方控件,如何实现繁简转换 137 如何将西文日期转换为中文日期格式 142 如何自动刷新链接表 150 如何让窗体打开得更快一些 210 如何读取使用插入对象插入的OLE字段的内容 206 Access两个未公开的方法 161 如何用代码创建自定义的工具栏 175 如何实时添加新的字体 176 如何将窗体放到系统托盘里 178 如何使用使用API设置窗体总在最前 190 如何实现窗体的位置自动跟随光标移动 200 如何防止他人导入导出数据库对象 203 如何避免数据库损坏 204 为什么要生成MDE及生成MDE的注意事项 162 如何设置listview控件的各种属性 215 如何判断数据库实例是否已打开 211 如何转换窗体中所有命令按钮控件为标签控件且保留原有事件 70 如何实现控件自动适应窗体的大小 71 如何实现在不同窗体视图有不同显示效果的窗体 212 如何自动添加指定的代码到各个窗体的事件中 217 如何自动拆分长SQL 语句字符串 218 如何调用帮助文件 219 如何限制程序使用次数和使用天数 221 如何打开另一个MDB文件并跳过启动窗体 223 如何为MDB和MDE设置两种不同的退出系统的方式 224 什么是标准的对象命名规则 225 什么是良好的代码注释规范 227 开发大型软件流程 212 如何自动添加指定的代码到各个窗体的事件中

125

如何编写传递多个参数给窗体和报表的函数 适用版本:97、2000、2002、2003
人气 95% 难度系数 *****
问题详述
     在Access中,打开窗体和报表时可以传递一个参数给窗体和报表,然后在窗体和报表的代码中通过Me.OpenArgs就可以获取这个参数进行相应的处理,但如果需要传递多个参数给窗体和报表,直接使用上述的方法就实现不了,只能使用间隔符将多个参数合并成一个参数再传递过去,然后在窗体和报表中再拆分这些参数。能否编写一个通用的模块来实现上述的功能呢?
专家解答(详细代码请参见本书内容)
    Access提供了instr函数用于字符串搜索,可以使用它以及Mid()Left()等字符串函数来共同实现这个功能,代码如下。
'===============================================================================
'-函数名称: gt_TmUpdateParaItem
'-功能描述: 更新参数中指定参数项的值
'-输入参数说明: 参数1:rstrParaItemKey String 参数项的名称
' 参数2:rvarValue Variant 指定参数项的值
' 参数3:rstrPara String 参数
'-返回参数说明: String 更新后的参数值
'-使用语法示例: gt_TmUpdateParaItem "Para1",25,"Para1:=22;Para2:=55"
'- 返回 Para1:=25;Para2:=55
'-参考: 微软帮助
'-使用注意: rvarValue是变量类型,但处理时会按字符串处理,如果你指定的值无法转换
' 成字符串类型的话,则会出错
'-兼容性: 97,2000,XP compatible
'-作者: 王宇虹,改进:王宇虹
'-更新日期: 2003-08-26
'===============================================================================

Public Function gt_TmUpdateParaItem(rstrParaItemKey As String, rvarValue As Variant, rstrPara As String) As String
'定义变量
Dim lngCnt As Long '长度
lngCnt = Len(rstrPara) '取参数的字符串长度
Dim lngKeyStart As Long '存储参数项名称的开始位置
Dim lngKeyEnd As Long '存储参数项名称的结束位置
Dim lngValueStart As Long '存储参数项值的开始位置
Dim lngValueEnd As Long '存储参数项值的结束位置
Dim strPara As String '存储参数字串
strPara = ";" & rstrPara '在参数前面加上;号便于后面搜寻处理

lngKeyStart = InStr(1, strPara, ";" & rstrParaItemKey & ":") '找到参数项名称的开始位置

If lngKeyStart > 0 Then '如果有此参数项
lngValueStart = InStr(lngKeyStart + 1, strPara, "=") + 1 '获取参数项值的开始位置
lngValueEnd = InStr(lngKeyStart + 1, strPara, ";") - 1 '获取参数项值的结束位置
If lngValueEnd < 1 Then
lngValueEnd = lngCnt + 1
End If

'如果有此参数项,则更新参数项的值
gt_TmUpdateParaItem = Left(strPara, lngValueStart - 1) & rvarValue & Mid(strPara, lngValueEnd + 1)
Else

'如果没有此参数项,则添加此参数项及它的值
gt_TmUpdateParaItem = strPara & ";" & rstrParaItemKey & ":=" & rvarValue
End If

'如果参数长度大于0,则删除前面为了方便处理而添加的;号
If Len(gt_TmUpdateParaItem) > 1 Then
gt_TmUpdateParaItem = Mid(gt_TmUpdateParaItem, 2)
End If

End Function
'===============================================================================
'-函数名称: gt_TmGetParaItem
'-功能描述: 更新参数中指定参数项的值
'-输入参数说明: 参数1:rstrParaItemKey String 参数项的名称
' 参数2:rstrPara String 参数
'-返回参数说明: String 返回指定的参数项的值
'-使用语法示例: gt_TmGetParaItem "Para1","Para1:=22;Para2:=55" 将返回22
'-参考: 微软帮助
'-使用注意: 如果没有此参数项的话,会返回空字符,需要对返回值进行判断
'-兼容性: 97,2000,XP compatible
'-作者: 王宇虹,改进:王宇虹
'-更新日期: 2003-08-26
'===============================================================================
Public Function gt_TmGetParaItem(rstrParaItemKey As String, rstrPara As String) As String
'定义变量
Dim lngCnt As Long '长度
lngCnt = Len(rstrPara) '取参数的字符串长度
Dim lngKeyStart As Long '存储参数项名称的开始位置
Dim lngKeyEnd As Long '存储参数项名称的结束位置
Dim lngValueStart As Long '存储参数项值的开始位置
Dim lngValueEnd As Long '存储参数项值的结束位置
Dim strPara As String '存储参数字串
strPara = ";" & rstrPara '在参数前面加上;号便于后面搜寻处理

lngKeyStart = InStr(1, strPara, ";" & rstrParaItemKey & ":") '找到参数项名称的开始位置

If lngKeyStart > 0 Then '如果有此参数项
lngValueStart = InStr(lngKeyStart + 1, strPara, "=") + 1 '获取参数项值的开始位置
lngValueEnd = InStr(lngKeyStart + 1, strPara, ";") - 1 '获取参数项值的结束位置
If lngValueEnd < 1 Then
lngValueEnd = lngCnt + 1
End If

'如果有此参数项,则返回参数项的值
gt_TmGetParaItem = Mid(strPara, lngValueStart, lngValueEnd - lngValueStart + 1)
Else

'如果没有此参数项,则返回空
gt_TmGetParaItem = ""
End If

End Function
'===============================================================================
'-函数名称: gt_TmRemoveParaItem
'-功能描述: 删除参数中指定参数项及它的值
'-输入参数说明: 参数1:rstrParaItemKey String 参数项的名称
' 参数2:rstrPara String 参数
'-返回参数说明: String 返回删除后的参数的值
'-使用语法示例: gt_TmRemoveParaItem "Para1","Para1:=22;Para2:=55" 将返回"Para2:=55"
'-参考: 微软帮助
'-使用注意: 如果没有此参数项的话,会返回原来的参数
'-兼容性: 97,2000,XP compatible
'-作者: 王宇虹,改进:王宇虹
'-更新日期: 2003-08-26
'===============================================================================
Public Function gt_TmRemoveParaItem(rstrParaItemKey As String, rstrPara As String) As String
'定义变量
Dim lngCnt As Long '长度
lngCnt = Len(rstrPara) '取参数的字符串长度
Dim lngKeyStart As Long '存储参数项名称的开始位置
Dim lngKeyEnd As Long '存储参数项名称的结束位置
Dim lngValueStart As Long '存储参数项值的开始位置
Dim lngValueEnd As Long '存储参数项值的结束位置
Dim strPara As String '存储参数字串
strPara = ";" & rstrPara '在参数前面加上;号便于后面搜寻处理

lngKeyStart = InStr(1, strPara, ";" & rstrParaItemKey & ":") '找到参数项名称的开始位置

If lngKeyStart > 0 Then '如果有此参数项
lngValueStart = InStr(lngKeyStart + 1, strPara, "=") + 1 '获取参数项值的开始位置
lngValueEnd = InStr(lngKeyStart + 1, strPara, ";") - 1 '获取参数项值的结束位置
If lngValueEnd < 1 Then
lngValueEnd = lngCnt + 1
End If

'如果有此参数项,则删除此参数项及它的值
gt_TmRemoveParaItem = Left(strPara, lngKeyStart - 1) & Mid(strPara, lngValueEnd + 1)
Else

'如果没有此参数项,则返回原来的参数
gt_TmRemoveParaItem = strPara
End If

'如果参数长度大于0,则删除前面为了方便处理而添加的;号
If Len(gt_TmRemoveParaItem) > 1 Then
gt_TmRemoveParaItem = Mid(gt_TmRemoveParaItem, 2)
End If
End Function
'===============================================================================
'-函数名称: gt_TmCheckParaItem
'-功能描述: 检查参数中指定参数项是否存在
'-输入参数说明: 参数1:rstrParaItemKey String 参数项的名称
' 参数2:rstrPara String 参数
'-返回参数说明: String 如果存在则返回True,否则返回False
'-使用语法示例: gt_TmRemoveParaItem "Para1","Para1:=22;Para2:=55" 将返回True
'-参考: 微软帮助
'-使用注意:
'-兼容性: 97,2000,XP compatible
'-作者: 王宇虹,改进:王宇虹
'-更新日期: 2003-08-26
'===============================================================================
Public Function gt_TmCheckParaItem(rstrParaItemKey As String, rstrPara As String) As Boolean
'定义变量
Dim lngCnt As Long '长度
lngCnt = Len(rstrPara) '取参数的字符串长度
Dim lngKeyStart As Long '存储参数项名称的开始位置
Dim lngKeyEnd As Long '存储参数项名称的结束位置
Dim lngValueStart As Long '存储参数项值的开始位置
Dim lngValueEnd As Long '存储参数项值的结束位置
Dim strPara As String '存储参数字串
strPara = ";" & rstrPara '在参数前面加上;号便于后面搜寻处理

lngKeyStart = InStr(1, strPara, ";" & rstrParaItemKey & ":") '找到参数项名称的开始位置

If lngKeyStart > 0 Then '如果有此参数项

'如果有此参数项,则返回真
gt_TmCheckParaItem = True
Else

'如果没有此参数项,则返回假
gt_TmCheckParaItem = False
End If

End Function
专家点评
     上述代码考虑到了参数项名称的各种可能性,所以可以处理各种字符包含的情况,例如gt_TmCheckParaItem("d","dd:=;yy:=99")返回的结果为False,而不是True,虽然“dd”包含了字符“d”,但参数项“d”并不等同参数项“dd”。

   

发表评论】【告诉好友】【打印此文】【关闭窗口
  网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
处理 URL 时服务器出错。请与系统管理员联系。