Foxtable(狐表)用户栏目专家坐堂 → 跨表锁定


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

主题:跨表锁定

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
跨表锁定  发帖心情 Post By:2022/4/12 17:14:00 [显示全部帖子]

我希望在仓库表的进仓数量列下拉窗口的本次录入数量中录入数量后,如果仓库账上单号、名称、规格与采购订单上的单号、名称、规格相同,两者数量相等时锁定采购订单行,我这样写无法锁定。
采购订单表的DataColChanged事件:
Select Case e.DataCol.Name
    Case "勾选"
        If e.DataRow.Isnull("单号") = False And e.DataTable.SQLCompute("Sum(数量)","[单号] = '" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) = DataTables("仓库账").SQLCompute("Sum(进仓数量)","[单号] = '" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) Then
            e.DataRow("勾选") = True
            e.DataRow.Locked = True
        Else
            e.DataRow("勾选") = False
            e.DataRow.Locked = False
        End If
End Select
另我也希望在仓库账删除进仓数量时,其他列的数据同步删除,这样写能实现删除了,但在仓库账的进仓数量下拉窗口录入本次录入数量时,其他列的数据没有同步录入,注识下面代码后才能同步录入其他列数据,如何解决上面两个问题。
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.name
    Case "进仓数量","进仓单价"
        If dr.IsNull("进仓数量") OrElse dr.IsNull("进仓单价") Then
            'dr("名称") = Nothing
            'dr("规格") = Nothing
            'dr("计量单位") = Nothing
            'dr("单号") = Nothing
            'dr("进仓单价") = Nothing
            dr("进仓金额") = Nothing
        Else
            'Dim ds As DataRow = DataTables("采购订单").SQLFind("[单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'") & "'","",0)
            'If ds IsNot Nothing Then
            'dr("名称") = ds("名称")
            'dr("规格") = ds("规格")
            'dr("计量单位") = ds("计量单位")
            'dr("单号") = ds("单号")
            'dr("进仓单价") = ds("单价")
            dr("进仓金额") = dr("进仓数量") * dr("进仓单价")
            'End If
        End If
End Select


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按条件锁定.foxdb


[此贴子已经被作者于2022/4/12 21:13:20编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/12 18:01:00 [显示全部帖子]

触发仓库账上的数据,判断单号、名称、规格相同,数量相等才锁定采购订单表上的行,一张订单上常有多个品种,现在要锁定的是品种一定要带上名称、规格,我就是不知如何实现跨表锁定。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/12 18:10:00 [显示全部帖子]

仓库账、采购订单表都会分页加载,所以用SQL查找,如果找不到相同单号、名称、规格的数据,采购订单表上的行都不打勾、不锁定,锁定的是采购订单上符合条件的行。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 0:57:00 [显示全部帖子]

已经可以同步更新了,但勾选和锁定还不行。
Dim dr As DataRow = e.DataRow
Dim dss As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'") & "'")
Select Case e.DataCol.name
    Case "进仓数量"
        If e.OldValue IsNot Nothing AndAlso e.NewValue Is Nothing Then
            dr("名称") = Nothing
            dr("规格") = Nothing
            dr("计量单位") = Nothing
            dr("单号") = Nothing
            dr("进仓单价") = Nothing
        Else
            For Each ds As DataRow In dss
                If ds IsNot Nothing Then
                    dr("名称") = ds("名称")
                    dr("规格") = ds("规格")
                    dr("计量单位") = ds("计量单位")
                    dr("单号") = ds("单号")
                    dr("进仓单价") = ds("单价")
                End If
            Next
        End If
End Select
dr("进仓金额") = dr("进仓数量") * dr("进仓单价")
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按条件锁定1.foxdb


[此贴子已经被作者于2022/4/13 9:33:47编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 9:39:00 [显示全部帖子]


Dim dts As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] Is Not Null And [单号] ='" & e.DataRow("单号") & "'")
For Each dt As DataRow In dts
    If dt IsNot Nothing Then
        If e.DataTable.Compute("Sum([进仓数量])","[单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) = _
            DataTables("采购订单").Compute("Sum([数量])","[单号] ='" & e.DataRow("单号") & "'And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) Then
            dt("勾选") = True
            dt.Locked = True
        Else
            dt("勾选") = False
            dt.Locked = False
        End If
    End If
    dt.save
Next
DataTables("采购订单").Load()
能勾选了,但不能取消勾选

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 9:40:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按条件锁定2.foxdb


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 10:38:00 [显示全部帖子]

仓库账的DataColChanged事件:
Dim dts As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] Is Not Null And [单号] ='" & e.DataRow("单号") & "'")
For Each dt As DataRow In dts
    If dt IsNot Nothing Then
        If e.DataTable.Compute("Sum([进仓数量])","[单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) = _
            DataTables("采购订单").Compute("Sum([数量])","[单号] ='" & e.DataRow("单号") & "'And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) Then
            dt("勾选") = True
            dt.Locked = True
        Else
            dt.Locked = False
            dt("勾选") = False
        End If
    End If
Next
DataTables("采购订单").SQLUpdate(dts)
DataTables("采购订单").Load()


采购订单账的DataColChanged事件:
Dim dts As List(of DataRow) = e.DataTable.SQLSelect("[单号] = '" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'"))
For Each dt As DataRow In dts
    Select Case e.DataCol.Name
        Case "勾选"
            If dt IsNot Nothing Then
                If e.DataRow.Isnull("单号") = False And e.DataTable.SQLCompute("Sum(数量)","[单号] = '" & dt("单号") & "' And [名称] ='" & dt("名称") & "' And [规格]" & IIF(dt.IsNull("规格")," Is Null"," ='" & dt("规格")  & "'")) = _
                    DataTables("仓库账").SQLCompute("Sum(进仓数量)","[单号] = '" & dt("单号") & "' And [名称] ='" & dt("名称") & "' And [规格]" & IIF(dt.IsNull("规格")," Is Null"," ='" & dt("规格")  & "'")) Then
                    dt("勾选") = True
                    dt.Locked = True
                Else
                    dt.Locked = False
                    dt("勾选") = False
                End If
            End If
    End Select
Next
e.DataTable.SQLUpdate(dts)
e.DataTable.Load()

始终能锁不能解
[此贴子已经被作者于2022/4/13 10:41:49编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 10:44:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按条件锁定3.foxdb


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 10:49:00 [显示全部帖子]

仓库账没有这行,但总不能设置为没有符合条件的行全解锁吧?因为其他单号或同单号不同品种的不可能锁住或解锁,我的条件是只要符合条件就锁,怎么设置它解锁呢?
[此贴子已经被作者于2022/4/13 10:58:26编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1882 积分:10385 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/4/13 11:16:00 [显示全部帖子]

仓库账的DataColChanged事件:
Dim dts As List(Of DataRow) = DataTables("采购订单").SQLSelect("[单号] Is Not Null And [单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) 
For Each dt As DataRow In dts
    If dt IsNot Nothing Then
        If e.DataTable.Compute("Sum([进仓数量])","[单号] ='" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) = _
            DataTables("采购订单").Compute("Sum([数量])","[单号] ='" & e.DataRow("单号") & "'And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'")) Then
            dt("勾选") = True
            dt.Locked = True
        Else
            dt.Locked = False
            dt("勾选") = False
        End If
    End If
Next
DataTables("采购订单").SQLUpdate(dts)
DataTables("采购订单").Load()

采购订单账的DataColChanged事件:
Dim dts As List(of DataRow) = e.DataTable.SQLSelect("[单号] = '" & e.DataRow("单号") & "' And [名称] ='" & e.DataRow("名称") & "' And [规格]" & IIF(e.DataRow.IsNull("规格")," Is Null"," ='" & e.DataRow("规格")  & "'"))
For Each dt As DataRow In dts
    Select Case e.DataCol.Name
        Case "勾选"
            If dt IsNot Nothing Then
                If e.DataRow.Isnull("单号") = False And e.DataTable.SQLCompute("Sum(数量)","[单号] = '" & dt("单号") & "' And [名称] ='" & dt("名称") & "' And [规格]" & IIF(dt.IsNull("规格")," Is Null"," ='" & dt("规格")  & "'")) = _
                    DataTables("仓库账").SQLCompute("Sum(进仓数量)","[单号] = '" & dt("单号") & "' And [名称] ='" & dt("名称") & "' And [规格]" & IIF(dt.IsNull("规格")," Is Null"," ='" & dt("规格")  & "'")) Then
                    dt("勾选") = True
                    dt.Locked = True
                Else
                    dt.Locked = False
                    dt("勾选") = False
                End If
            End If
    End Select
Next
e.DataTable.SQLUpdate(dts)
e.DataTable.Load()

点采购订单勾选列重置报错,但勾选号消失了,在仓库账进仓数量下拉窗口本次录入数量处无法录入数据,单元格处锁定状态。


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