以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求,帮忙简化代码!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131042)

--  作者:304376480
--  发布时间: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


--  作者:有点甜
--  发布时间:2019/2/14 22:30:00
--  

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

 

vars("表") = "表A"

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

forms("选择商品").Show

 

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


--  作者:304376480
--  发布时间:2019/2/14 23:55:00
--  
哈哈,好,这样确实简洁多了,感谢甜老师! 看来以后还得多问问才行图片点击可在新窗口打开查看

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



--  作者:有点甜
--  发布时间:2019/2/15 9:24:00
--  

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

 

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


--  作者:304376480
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2019/2/15 11:40:00
--  

 

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

msgbox(n)

 


--  作者:304376480
--  发布时间:2019/2/15 11:54:00
--  
原来count还可以这样用啊,学习了!图片点击可在新窗口打开查看