Foxtable(狐表)用户栏目专家坐堂 → 自定义录入


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

主题:自定义录入

帅哥,在线噢!
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/11 15:04:00 [只看该作者]

换种方式查询

        Dim idx As Integer = Tables("公差标准").Find(e.DataRow("等级"), 0, "等级", True, True, True)
        If idx > -1 Then 
            dr = Tables("公差标准").rows(idx).DataRow
            e.DataRow("极限偏差") = dr(cn)
        End If

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


加好友 发短信
等级:二尾狐 帖子:569 积分:4738 威望:0 精华:0 注册:2013/2/18 17:46:00
  发帖心情 Post By:2023/10/14 13:15:00 [只看该作者]

如果当前行的公差等级数值精密),极限偏差表中未能找到匹配的(粉色部分代码),就转到一般公差表中去查找,蓝版帮我看一下。

If e.DataCol.Name = "公差等级" OrElse e.DataCol.Name = "尺寸" Then '如果内容发生变动的是品名列
    If e.DataRow.IsNull("公差等级") OrElse e.DataRow.IsNull("尺寸") Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("极限偏差") = Nothing '那么清空此行单价列的内容
    ElseIf
        Dim dr As DataRow 
        
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        Dim cc As Double = e.DataRow("尺寸")
        Dim cn As String
        If cc <= 18 Then
            cn = "A"
        Else If cc > 18 AndAlso cc <= 30
            cn = "B"
        Else If cc > 30 AndAlso cc <= 50
            cn = "C"
        End If 
        dr = DataTables("极限偏差表").Find("[公差带] = '" & e.DataRow("公差等级") & "'") Then
        Dim idx As Integer = Tables("极限偏差表").Find(e.DataRow("公差等级"), 0, "公差带", True, True, True)
              If idx > -1 Then 
              dr = Tables("极限偏差表").rows(idx).DataRow 
              e.DataRow("极限偏差") = dr(cn)
              End If
     ElseIf
            Dim dr As DataRow 
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        Dim cc As Double = e.DataRow("尺寸")
        Dim cn As String
        If cc <= 18 Then
            cn = "A"
        Else If cc > 18 AndAlso cc <= 30
            cn = "B"
        Else If cc > 30 AndAlso cc <= 50
            cn = "C"
        End If 
        dr = DataTables("一般公差").Find("[公差等级] = '" & e.DataRow("公差等级") & "'") Then
        Dim idx As Integer = Tables("一般公差").Find(e.DataRow("公差等级"), 0, "公差等级", True, True, True)
              If idx > -1 Then 
              dr = Tables("一般公差").rows(idx).DataRow 
              e.DataRow("极限偏差") = dr(cn)
              End If


              
    End If
End If


 回到顶部
帅哥,在线噢!
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/14 13:36:00 [只看该作者]

编程基础还是要多看看,把基础学好:http://www.foxtable.com/webhelp/topics/0223.htm

        Dim idx As Integer = Tables("极限偏差表").Find(e.DataRow("公差等级"), 0, "公差带", True, True, True)
              If idx > -1 Then 如果查得到
              dr = Tables("极限偏差表").rows(idx).DataRow 
              e.DataRow("极限偏差") = dr(cn)
else 否则,意思就是查不到
把查询其它表的代码放到这里
              End If

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


加好友 发短信
等级:二尾狐 帖子:569 积分:4738 威望:0 精华:0 注册:2013/2/18 17:46:00
  发帖心情 Post By:2023/10/14 16:24:00 [只看该作者]

增加一列,要求查询到[类别][公差等级]都符合要求,代码不知道加到哪里合适?
        dr = DataTables("一般公差表").Find( "[类别] = '" & e.DataRow("类别") & "'" And "[公差等级] = '" & e.DataRow("公差等级") & "'") 
      Dim idx As Integer = Tables("一般公差表").Find(e.DataRow("公差等级"), 0, "公差等级", True, True, True)
        If idx > -1 Then 
            dr = Tables("一般公差表").rows(idx).DataRow
            e.DataRow("极限偏差") = dr(cn)

 回到顶部
帅哥,在线噢!
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/14 16:30:00 [只看该作者]

先看3遍:http://www.foxtable.com/webhelp/topics/1284.htm
dr = DataTables("一般公差表").Find( "[类别] = '" & e.DataRow("类别") & "' And [公差等级] = '" & e.DataRow("公差等级") & "'") 

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


加好友 发短信
等级:二尾狐 帖子:569 积分:4738 威望:0 精华:0 注册:2013/2/18 17:46:00
  发帖心情 Post By:2023/10/14 20:17:00 [只看该作者]

蓝老师:基础太差,看了N遍教程,还是没搞懂,感觉动态合成表达式少了两个双引号。

"[产品] = '"等同于[产品] = '   Vars("产品")等同于PD01   "'"等同于'  


"[产品] = '" & Vars("产品") & "'" 不是变成[产品] = 'PD01',而不是变成"[产品] = 'PD01'"


少了两个双引号?



图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/15 20:27:00 [只看该作者]

我们来一步步解析,在分析之前先学一个基础:http://www.foxtable.com/webhelp/topics/0221.htm,了解一下&符号的用法

1、首先原表达式字符串为"[产品] = 'PD01'",使用代码定义一个变量赋值就是这样的
dim filter as string = "[产品] = 'PD01'"
测试结果为:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
注意,用双引号引用表示一个字符串,但是这个字符串本身是不包含双引号的,双引号是语法的一部分,而不是字符串的一部分,看输出的结果就明白了,输出结果是没有双引号的。

2、现在表达式是一个字符串(2个双引号之间的内容),我们把表达式拆分为3个字符串,PD01提取出来独立为一个字符串,PD01前的内容是另外一个字符串,PD01后的内容是第3个字符串,就是这样:
dim a as string = "[产品] = '"
dim b as string = "PD01"
dim c as string = "'"
上面红色的内容才是字符串,不包含双引号本身

3、然后使用&符合连接这3个字符串,就是这样的:
dim filter as string = a & b & c
可以看到测试结果和第一步的结果是一样的

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

4、然后其实只有b变量的PD01这个内容是变化的,比如可能是PD02、PD03,而a变量和c变量的内容是不变的,所以实际我们只需要把PD01改为使用变量替换,其它内容保留为字符串形式即可,也就是我们需要的结果是:
dim b as string = "PD01"
dim filter as string = "[产品] = '" & b & "'"

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

然后我们需查询其它产品时,只需要改一下变量的值,比如PD02,然后结果是

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看



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


加好友 发短信
等级:二尾狐 帖子:569 积分:4738 威望:0 精华:0 注册:2013/2/18 17:46:00
  发帖心情 Post By:2023/10/16 0:09:00 [只看该作者]

蓝老师: 标记的代码怎么写?

If e.DataCol.Name = "孔径" OrElse e.DataCol.Name = "孔深" Then '如果内容发生变动的是品名列
    If e.DataRow.IsNull("孔径") OrElse e.DataRow.IsNull("孔深") Then '如果新值是空白,也就是品名列的内容为空
       e.DataRow("钻孔时间") = Nothing '那么清空此行单价列的内容
   Else
        Dim dr As DataRow
      '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        Dim cc As Double = e.DataRow("孔深")
       Dim cn As String
        If cc <= 50 Then
            cn = "A"
        Else If cc > 50 AndAlso cc <= 100
          cn = "B"
   Else If cc > 100 AndAlso cc <= 150
            cn = "C"
       End If
        
       
       
       Dim cs As Double = e.DataRow("孔径")
    Dim css As String
        If cs <= 5 Then
           css = "≤5"
      Else If cs > 5 AndAlso cs <= 6
         css = "≤6"
       
     End If 

      dr = DataTables("查询表").Find("[孔径] = '" & dr("孔径")(css) & "'")      查找孔径列的数值等于CSS的行?

      If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            e.DataRow("钻孔时间") = dr(cn)
        
    End If
  End If
End If


 回到顶部
帅哥,在线噢!
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107757 积分:548124 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/16 8:39:00 [只看该作者]

cn表示的是列名,那么css表示的是什么东西?

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


加好友 发短信
等级:二尾狐 帖子:569 积分:4738 威望:0 精华:0 注册:2013/2/18 17:46:00
  发帖心情 Post By:2023/10/16 9:40:00 [只看该作者]

CSS 表示孔径列的数值,希望当前表的当前行的孔径列数值跟资料库的孔径相匹配

图片点击可在新窗口打开查看


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