Foxtable(狐表)用户栏目专家坐堂 → Table、副表和SQLTable问题求助


  共有4226人关注过本帖树形打印复制链接

主题:Table、副表和SQLTable问题求助

帅哥哟,离线,有人找我吗?
有点蓝
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106481 积分:541558 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/5 15:32:00 [只看该作者]

CurrentChanged事件代码移到afterfilter事件

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/5 15:39:00 [只看该作者]

图片点击可在新窗口打开查看移过去后还是一样,窗口中的统计人数的文本框不会随筛选而变动,窗口中的表会随之变化,反应速度也变快了很多

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106481 积分:541558 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/5 15:55:00 [只看该作者]

上传具体实例说明

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/5 15:58:00 [只看该作者]

我把所有副表的CurrentChanged事件代码都移到Aftetfilter事件中去后,就可以了,速度好象还不错,比在CurrentChanged中要快上不少
部分代码如下:每个副表原来的CurrentChanged事件代码都差不多,只是所在窗口不同而已,有几个窗口就写几段。
If Forms("鉴定信息汇总").Opened Then
    Forms("鉴定信息汇总").Controls("总人数").Text = e.Table.Compute("count(姓名)")
    Forms("鉴定信息汇总").Controls("初级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '初级工'")
    Forms("鉴定信息汇总").Controls("中级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '中级工'")
    Forms("鉴定信息汇总").Controls("高级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级工'")
    Forms("鉴定信息汇总").Controls("技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '技师'")
    Forms("鉴定信息汇总").Controls("高级技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级技师'")
    Forms("鉴定信息汇总").Controls("男").Text = e.Table.Compute("count(姓名)", "性别 = '男'")
    Forms("鉴定信息汇总").Controls("女").Text = e.Table.Compute("count(姓名)", "性别 = '女'")
End If
If Forms("报名登记汇总").Opened Then
    Forms("报名登记汇总").Controls("总人数").Text = e.Table.Compute("count(姓名)")
    Forms("报名登记汇总").Controls("初级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '初级工'")
    Forms("报名登记汇总").Controls("中级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '中级工'")
    Forms("报名登记汇总").Controls("高级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级工'")
    Forms("报名登记汇总").Controls("技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '技师'")
    Forms("报名登记汇总").Controls("高级技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级技师'")
    Forms("报名登记汇总").Controls("男").Text = e.Table.Compute("count(姓名)", "性别 = '男'")
    Forms("报名登记汇总").Controls("女").Text = e.Table.Compute("count(姓名)", "性别 = '女'")
End If
If Forms("中高级工资审").Opened Then
    Forms("中高级工资审").Controls("总人数").Text = e.Table.Compute("count(姓名)")
    Forms("中高级工资审").Controls("初级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '初级工'")
    Forms("中高级工资审").Controls("中级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '中级工'")
    Forms("中高级工资审").Controls("高级工").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级工'")
    Forms("中高级工资审").Controls("技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '技师'")
    Forms("中高级工资审").Controls("高级技师").Text = e.Table.Compute("count(姓名)", "鉴定等级 = '高级技师'")
    Forms("中高级工资审").Controls("男").Text = e.Table.Compute("count(姓名)", "性别 = '男'")
    Forms("中高级工资审").Controls("女").Text = e.Table.Compute("count(姓名)", "性别 = '女'")
End If
版主给看看这样写行不行?这其中e.table我没有按甜版说的写成具体的表名,而是用了原来最早写的代码格式,这样就可以了,有没更优化的写法?


[此贴子已经被作者于2019/1/5 16:18:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106481 积分:541558 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/5 16:22:00 [只看该作者]

Dim IsCompute As Boolean

Dim fs() As String = {"鉴定信息汇总","报名登记汇总","中高级工资审"}
Dim 总人数 As Integer
Dim 初级工 As Integer
……其他定义参考补充完整
For Each f As String In fs
    If Forms(f).Opened Then
        If IsCompute = False
            IsCompute =True
            总人数 = e.Table.Compute("count(姓名)")
            初级工 = e.Table.Compute("count(姓名)", "鉴定等级 = '初级工'")
……其他定义参考补充完整
        End If
        Forms(f).Controls("总人数").Text = 总人数
        Forms(f).Controls("初级工").Text = 初级工
        ……其他定义参考补充完整
    End If
Next

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/5 16:36:00 [只看该作者]

谢谢蓝版指教,表的DataColChanged事件代码那样写应该没有问题吧,要不要作相应的改动?
DataColChanged事件:
If e.DataCol.Name = "鉴定等级" Then
    e.Form.Controls("总人数").Text = e.DataTable.Compute("count(姓名)",Tables("鉴定管理表").filter)
    e.Form.Controls("初级工").Text = e.DataTable.Compute("count(姓名)", "鉴定等级 = '初级工' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("中级工").Text = e.DataTable.Compute("count(姓名)", "鉴定等级 = '中级工' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("高级工").Text = e.DataTable.Compute("count(姓名)", "鉴定等级 = '高级工' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("技师").Text = e.DataTable.Compute("count(姓名)", "鉴定等级 = '技师' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("高级技师").Text = e.DataTable.Compute("count(姓名)", "鉴定等级 = '高级技师' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("男").Text = e.DataTable.Compute("count(姓名)", "性别 = '男' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
    e.Form.Controls("女").Text = e.DataTable.Compute("count(姓名)", "性别 = '女' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1"))
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106481 积分:541558 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/5 16:52:00 [只看该作者]

如果是主表事件,e.form改为具体的窗口名称Forms("鉴定信息汇总")

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/5 16:58:00 [只看该作者]

这个没理解,表就1个(算主表吧),我是用导航窗口打开其它窗口,Forms("鉴定信息汇总")只是其中的一个窗口,每个副表都在自己的窗口中,那是不是对应每个窗口都要在事件中写上一段?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106481 积分:541558 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/5 17:03:00 [只看该作者]

逻辑一样,参考24、25楼,或者放到内部函数中,然后调用函数

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/5 17:45:00 [只看该作者]

谢蓝版指点,我的开发版只能升级到去年4月,不支持内部函数,想继续升级购买,单位领导还没批。
我把中间那段依葫芦画瓢替换了一下,结果还不错,没报错,运行反应也相对以前的代码快捷了很多倍,也没有什么卡顿。只是窗口打开时间还需要那么4-5秒钟,不过也比以前快了不少!

 回到顶部
总数 30 上一页 1 2 3