Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

窗体间多个参数的传递

冰花雪虹  发表于:2010-08-30 00:41:45  
复制

看到这样一个方法,但是没有明白,希望能详细一点,谢谢。

 

6。多个参数传递

如果需要传递多个参数,可将参数合并到一个变量里传送(使用指定符号隔开),然后在被调用窗体再拆分这些变量,以达到多个参数传递的效果。

不过,因为一般传递两个参数的时候,多数一个是变量,一个是窗体本身,

所以我常用的方法也是比较实用的方法是:

在调用窗体使用如下语句:

docmd.openform "被调用的窗体", , , , , , "参数值"

而在被调用的窗体里设置一个模块变量 mfrmSrc

在被调用的窗体的open或load事件中设置

set mfrmSrc= screen.activeform

这时mfrmSrc就指向原来的调用窗体(因为在窗体未完全加载好前,屏幕上激活的窗体是原来的窗体)

使用mfrmSrc你可以获取调用窗体上所有控件及相关的值,并且不需要事先知道原来窗体的名称,具有比较强的通用性。

 

Top
煮江品茶 发表于:2010-08-30 11:57:50
方法和手段多种多样,能解决问题就可以。学的时间长了,就可以发现各种方法和手段之间有些细微的差异,这些差异在解决不同类型的问题时,常常有些不同的效果。

冰花雪虹 发表于:2010-08-30 13:19:10
谢谢。

冰花雪虹 发表于:2010-08-30 13:34:43

先用    DoCmd.OpenForm "考核分类数据", acNormal, "", "[ID]=" & ID, , , Me.考核时间

 

传递了两个参数,一个是ID,一个是考核时间

 

 

在另一个窗体上用        DoCmd.GoToRecord , , acGoTo, [ID]


接收记录,我感觉好像是打开数据库的时候第一次点击ID链接后,能够打开对应的记录,而之后,总是显示ID=3(第一记录),不知道是怎么回事?



冰花雪虹 发表于:2010-08-30 13:43:12

把后面的[ID]改成数字好像能跳到指定记录上,那么怎么利用前面所传递的那个 "[ID]=" & ID 参数呢?



煮江品茶 发表于:2010-08-30 14:39:24

 在DoCmd.OpenForm 时,第4个参数如果为 "[ID]=" & ID,则打开的窗体已经被筛选了。又由于ID字段的唯一性,所以被打开的窗体当然只有一条记录。在此情况下,对窗体执行DoCmd.GoToRecord  便没有什么实际意义。

 

注意 "[ID]=" & ID,实际上是 "[ID]=" & me.ID.value

 



冰花雪虹 发表于:2010-08-30 16:29:48

  请帮我看一下,我的目的是打开这个“考核分类数据”(事先没有指定数据源)窗口的时候,如果是在前一个窗体上点击ID链接打开的话,就一定会有传递过来的参数(就是考核时间),如果是独立打开的话,这个值肯定为空。DoCmd.OpenForm "考核分类数据", acNormal, "", "[ID]=" & ID, , , Me.考核时间

  

  依据这个参数的值(年月)转化成数据库表,先确定数据源。如果这个参数不为空(即有时间)的话,就会转到后面蓝色字的那一部分代码。现在的问题是我在前面的那个窗口不论点击哪个ID,都是直接显示的第一条记录。按5楼的说法我去掉了gotorecord,还是不行,希望大家帮忙看看。

 

Private Sub Form_Load()
    Dim Sql As String           '设置一个SQL变量
    Dim tblName As String       '设置一个表或查询的名字变量
    Dim sj As String            '设置一个日期变量
    Dim jg As Long              '设置一个距离当前月有几个月的变量
    Dim i As Long
    Dim ls As Boolean           '设置一个真假变量
    If IsNull(Me.OpenArgs) Then
        Me.txtsj.Value = Format(txtsj.ItemData(0), "yyyy年m月")
        sj = Format(Me.txtsj.Value, "yyyymm")
        jg = 0
        ls = False
        For i = 0 To Me.txtsj.ListCount
            tblName = "00" & sj & ":考核原始数据"
            Sql = "select [" & tblName & "].* from " & tblName
            If tblA(tblName) = True Then
                ls = True
            ElseIf tblB(tblName) = True Then
                ls = True
            Else
                jg = jg - 1
                sj = Format(DateAdd("m", jg, Me.txtsj.Value), "yyyymm")
                Me.txtsj.Value = Format(DateAdd("m", jg, Me.txtsj.Value), "yyyy年m月")
                ls = False
            End If
        Next i
        If ls = True Then
            Me.Form.Caption = Format(Me.txtsj.Value, "yyyy年m月") & " 绩效工资考核批量数据"
            Me.Form.RecordSource = Sql
            Me.Requery
        Else
            Me.Form.Caption = "对不起,数据库没有绩效工资考核数据!"
            MsgBox ("您好,非常抱歉,没有找到您所需要的绩效工资考核数据,也可能是您查保存的名称不符合要求,正确的命名方式为“00******:考核原始数据”,其中的******代表四位年和两位月代码,年月之间没有任何连字符。")
        End If
    Else
        Me.txtsj.Value = Format(Me.OpenArgs, "yyyy年m月")
        sj = Format(Me.txtsj.Value, "yyyymm")
        tblName = "00" & sj & ":考核原始数据"
        Sql = "select [" & tblName & "].* from " & tblName
        Me.Form.Caption = Format(Me.txtsj.Value, "yyyy年m月") & " 绩效工资考核批量数据"
        Me.Form.RecordSource = Sql
        Me.Requery        
    End If
End Sub



冰花雪虹 发表于:2010-09-02 19:53:32

没有人来\?

 

最终还是在网上搜索了一下,先合并要传递的参数,在分开,呵呵。



总记录:7篇  页次:1/1 9 1 :