以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]代码报错及移动行的代码求助  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=172015)

--  作者:huangfanzi
--  发布时间:2021/9/18 9:42:00
--  [求助]代码报错及移动行的代码求助
先说报错:
全局代码:PrepareEdit
If e.Table.Cols.Contains("审核") AndAlso e.Table.IsRelation =False Then
    If e.Row("审核") = True AndAlso e.Col.Name <> "审核"  Then \'本条记录审核后禁止编辑除审核外的所有列
        e.Cancel = True
    ElseIf e.Row("审核") = False Then \'未审核的记录在编辑前检查是否在后台已经被审核
        Dim cmd As New SQLCommand
        cmd.C
        cmd.C ommandText = "S elect [审核] F rom {" & e.Table.Name & "} Where [_Identify] = " & e.Row("_Identify") \'从后台读取记录的审核列值
        Dim sh As  Boolean = cmd.ExecuteScalar() \'后台读取的审核列值赋值给sh变量
        If sh = True  Then
            Dim 行号 As Integer = e.Row("_Identify") \'将即将被移除的行的_Identify值赋值给变量行号
            e.Table.DataTable.RemoveFor("[_Identify] = " & e.Row("_Identify")) \'移除本行
            e.Table.DataTable.AppendLoad("[_Identify] = " & 行号) \'重新加载之前移除的行
            MessageBox.Show("本条记录已经在后台被审核,现已重新加载!" , "提示" , MessageBoxButtons.OK ,MessageBoxIcon.Information)
        End If
    End If
End If
以下是窗口表设置:

图片点击可在新窗口打开查看此主题相关图片如下:窗口表设置.jpg
图片点击可在新窗口打开查看
在这个窗口表上随便哪一行点下,就会报错:

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

想不明白这是何解,请老师帮忙看看
另外,在这个窗口表上,我想按 CTRL + ↑ 及 CTRL + ↓ 来移动行,这样排工序方便点,不要在顺号列录序号来控制了,请老师帮忙写下示例代码,谢谢!




--  作者:有点蓝
--  发布时间:2021/9/18 10:19:00
--  
代码放到startedit事件

If e.Table.Cols.Contains("审核") AndAlso e.Table.IsRelation =False Then
    If e.Row("审核") = True AndAlso e.Col.Name <> "审核"  Then \'本条记录审核后禁止编辑除审核外的所有列
        e.Cancel = True
    ElseIf e.Row("审核") = False Then \'未审核的记录在编辑前检查是否在后台已经被审核
        Dim cmd As New SQLCommand
        cmd.C
        cmd.C ommandText = "S elect [审核] F rom {生产计划辅表} Where [_Identify] = " & e.Row("_Identify") \'这里必须使用数据库的表名,不能使用窗口表名称
        Dim sh As  Boolean = cmd.ExecuteScalar() \'后台读取的审核列值赋值给sh变量
        If sh = True  Then
            e.Row.load(false) \'http://www.foxtable.com/webhelp/topics/2895.htm
            MessageBox.Show("本条记录已经在后台被审核,现已重新加载!" , "提示" , MessageBoxButtons.OK ,MessageBoxIcon.Information)
        End If
    End If
End If

--  作者:huangfanzi
--  发布时间:2021/9/18 11:30:00
--  
看来问题就出在窗口表名称上,这个代码的功能是要用于所有主表的,所以放在全局代码中了,如何判定某表是窗口中的表,从而对代码中的数据库名进行调整
--  作者:有点蓝
--  发布时间:2021/9/18 11:34:00
--  
判断名称中有下划线的就是窗口表。可以考虑把窗口表控件名称改为和表名一致,比如table1改为生产计划辅表,然后根据下划线拆分字符串即可