Foxtable(狐表)用户栏目专家坐堂 → 求,帮忙简化代码!


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

主题:求,帮忙简化代码!

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


加好友 发短信
等级:小狐 帖子:339 积分:3766 威望:0 精华:0 注册:2017/9/7 15:20:00
求,帮忙简化代码!  发帖心情 Post By:2019/2/14 21:29:00 [只看该作者]

老师您好!

下面是一个用来选择商品的模式窗口,DoubleClick事件中的代码,总感觉挺呆板的感觉,为每一个窗口写着重复的代码!

还有就是用 Forms("窗口名").Opened = True 来判断窗口,是否不够严谨?还有什么方法来判断录入数据的窗口吗?求优化...谢谢!

Dim tbl As Table = Tables("选择商品_Table1")
Dim nma() As String = {"商品ID","商品名称","型号规格","单位"} 
If Forms("销售单").Opened = True Then
    If tbl.Current IsNot Nothing Then
        Dim dr As Row = Tables("销售单").Current
        For i As Integer = 0 To nma.Length - 1
            dr(nma(i)) = e.Row(nma(i))
        Next
        dr("单价") = e.Row("预售价")
    End If
ElseIf Forms("销售退货单").Opened = True Then
    If tbl.Current IsNot Nothing Then
        Dim dr As Row = Tables("销售退货单").Current
        For i As Integer = 0 To nma.Length - 1
            dr(nma(i)) = e.Row(nma(i))
        Next
        dr("单价") = e.Row("最近进价")
    End If
ElseIf Forms("销售退货明细").Opened = True Then
    If tbl.Current IsNot Nothing Then
        Dim dr As Row = Tables("销售退货明细_table1").Current
        For i As Integer = 0 To nma.Length - 1
            dr(nma(i)) = e.Row(nma(i))
        Next
        dr("单价") = e.Row("最近进价")
    End If
ElseIf Forms("进货单").Opened = True Then
    If tbl.Current IsNot Nothing Then
        Dim dr As Row = Tables("进货单").Current
        For i As Integer = 0 To nma.Length - 1
            dr(nma(i)) = e.Row(nma(i))
        Next
        dr("单价") = e.Row("最近进价")
    End If

‘...以下还有很多个单据....
END IF


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/14 22:30:00 [只看该作者]

在打开模式窗口的时候,记录是哪个窗口或者哪个表格打开的,如

 

vars("表") = "表A"

vars("窗口") = "窗口1"

forms("选择商品").Show

 

然后,doubleclick事件那里,直接使用 vars("表") vars("窗口")


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


加好友 发短信
等级:小狐 帖子:339 积分:3766 威望:0 精华:0 注册:2017/9/7 15:20:00
  发帖心情 Post By:2019/2/14 23:55:00 [只看该作者]

哈哈,好,这样确实简洁多了,感谢甜老师! 看来以后还得多问问才行图片点击可在新窗口打开查看

再问一下,
在 datatable 中可以用select 来选择 商品不为空的行,count获得行的数量
那么,在 Tables("窗口1_Table1") 表中,如何表示 商品ID 不为空的行,以及行的数量



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/15 9:24:00 [只看该作者]

方法一:直接筛选 tables("表A").filter = "第一列 is not null"

 

方法二:循环每一行,然后判断某列的值;如果要获取行数据量,可以用compute统计个数。


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


加好友 发短信
等级:小狐 帖子:339 积分:3766 威望:0 精华:0 注册:2017/9/7 15:20:00
  发帖心情 Post By:2019/2/15 11:08:00 [只看该作者]

以下是引用有点甜在2019/2/15 9:24:00的发言:

方法二:循环每一行,然后判断某列的值;如果要获取行数据量,可以用compute统计个数。


老师您好!所有的行一起循环,怎么用compute统计个数的呢?是计算循环次数吗? 

 
Dim n As Integer 
For Each r As Row In Tables("进货明细_table1").Rows 
  If r.Isnull("商品ID") Then 
  Continue For 
  End If 
  Output.Show(r("商品名称"))
  n += 1 
Next 
Output.Show(n)
[此贴子已经被作者于2019/2/15 11:09:06编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/15 11:40:00 [只看该作者]

 

Dim n = Tables("进货明细_table1").compute("count(商品id)", "商品id is not null")

msgbox(n)

 


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


加好友 发短信
等级:小狐 帖子:339 积分:3766 威望:0 精华:0 注册:2017/9/7 15:20:00
  发帖心情 Post By:2019/2/15 11:54:00 [只看该作者]

原来count还可以这样用啊,学习了!图片点击可在新窗口打开查看

 回到顶部