注册 登录
编程论坛 VB6论坛

模块内某个过程与窗体控件的数据调用问题。

wxflw 发布于 2020-02-13 10:50, 2563 次点击
窗体1.2都有一个combo1,combo2,在模块中做一个Public Function,或Public sub,模块中的过程根据其中一个窗体的的触发条件在模块中执行,然后反馈到控件中。
比如:加载窗体的时候,窗体1的combo1需要加载表1中一个字段下的所有不重复数据,过程在模块中,条件由窗体1中提供是combo1还是combo2.可以灵活变化。这个怎么弄,有没有先关例子,最好有注释的,学习一下。
5 回复
#2
wxflw2020-02-14 07:54
有大神解答一下吗?我在标准模块中写一个查询表格内容的过程,怎么把窗体中的条件发送到模块中,然后再把模块中查询到的结果发送回窗体中对应的控件中。
比如这样,把查询到的内容写到combo中,如果我想用这个过程在form2中的combo2中也用这个过程就需要改变这两个参数,但是这个过程放在模块中怎么弄的?参数怎么去改变?
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "provider=microsoft.ace.oledb.12.0;Data Source=" & App.Path & "\e.accdb;Jet OLEDB:Database Password=1;"
    sql = "select 编号 from 信息 "
    rs.Open sql, cn, 3, 3
    If rs.Fields.Count > 0 Then
      
        For i = 0 To rs.Fields.Count - 1
            If rs.Fields(i).Name <> "ID" Then
                rs.Fields(i).Name
            End If
        Next
    End If
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
#3
风吹过b2020-02-14 09:01
sub XX(cb as ComboBox)
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "provider=microsoft.ace.oledb.12.0;Data Source=" & App.Path & "\e.accdb;Jet OLEDB:Database Password=1;"
    sql = "select 编号 from 信息 "
    rs.Open sql, cn, 3, 3
    If rs.Fields.Count > 0 Then
       cb .Clear
        For i = 0 To rs.Fields.Count - 1
            If rs.Fields(i).Name <> "ID" Then
                cb .AddItem rs.Fields(i).Name
            End If
        Next
    End If
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
end sub

调用
call xx()

call xx()

方案就是把这个控件以参数形式传进去。注意,如果写出参数传递形式,只能是按地址传递。


#4
wxflw2020-02-14 11:20
回复 3楼 风吹过b
大哥!按这个做法,是否说很多参数都可以这样传递,
比如字段名,表名,查询条件,模块中可以这样做?
    sub XX(cb as ComboBox, 字段名 As Long, 表名 As Long,查询条件 As Long)
     Cb.Clear
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "provider=microsoft.ace.oledb.12.0;Data Source=" & App.Path & "\e.accdb;Jet OLEDB:Database Password=1;"
    sql = "select 字段名 from 表名 "
    rs.Open sql, cn, 3, 3

然后窗体中可以这样

call xx(,字段名,表名,查询条件)
#5
风吹过b2020-02-14 17:06
可以的。


建议你继续深入学习,
然后查询条件生成再用一个子函数生成。这样可以生成复杂的查询条件。
需要学习的知识
1、子函数
2、参数类型,参数传递方式
3、可选参数
4、任意多个参数

#6
wxflw2020-02-15 08:56
回复 5楼 风吹过b
好的!谢谢!平时没有时间,就最近要隔离14天,所以又开始拿出来研究研究了
1