以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]目录树aftereditnode代码报错  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=116100)

--  作者:yzxdz750626
--  发布时间:2018/3/20 2:17:00
--  [求助]目录树aftereditnode代码报错
 
Dim jm As String = "\'" & dg("级码") & "%\'"
Dim lj As String = "\'" & e.Node.fullpath & "%\'"
For Each de In dt.Select("目录层级 >= \'" & i & "\' And 上级级码 Like \'" & jm & "\' And 目录 Like \'" & lj & "\'" ) \'历遍目录列中所有需要重命名的行
     Dim ml2 As String = de("目录").Substring(pl) \'在选出的行的目录列中,取将本层目录后的值
     de("目录") = pth & e.newtext & ml2 \'将需要更改行中,目录列需要修改的部分修改为新名称
     de("文件名") = e.NewText \'将本行文件名修改为新名称
Next

上面的代码是在窗口中目录树aftereditnode事件代码的一部分,每次运行到黄色背景的这面代码时,总是报错:

                                                    <语法错误:“1”运算符后缺少操作数。>

是不是我这行的表达式写错了?

还请大神解惑!谢谢!

--  作者:有点甜
--  发布时间:2018/3/20 8:42:00
--  

改成

 

msgbox("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")

For Each de In dt.Select("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")


--  作者:yzxdz750626
--  发布时间:2018/3/20 9:51:00
--  
有点甜大神你好:

谢谢你给出修改意见,但按照你给的修改方法,运行时还是报错:<语法错误:“1”运算符后缺少操作数。>

图片点击可在新窗口打开查看此主题相关图片如下:档案目录管理.png
图片点击可在新窗口打开查看
上图是与目录树相关联的表
窗口中的目录树可以增加根目录、增加子目录正常。
以下是aftereditnode的全部代码,还请大神看看是不是其他地还有问题?谢谢!
Dim dt As DataTable = DataTables("档案目录管理")
If e.NewText = "" Then
    e.Cancel = True
    Return
End If
MessageBox.Show(e.node.fullpath)
Dim dr As DataRow = dt.find("目录 = \'" & e.node.fullpath & "\'and 目录层级 = \'" & e.node.level & "\'") \'查找本节点对应行
MessageBox.Show("目录=" & dr("目录"))
If dr IsNot Nothing Then  \'如果存在
    Dim ds As DataRow
    Dim de As DataRow
    Dim i As Integer = e.node.level
    If i > 0 Then
        Dim fn As String = dr("文件名")  \'将本行文件名列的值赋于FN
        Dim pth1 As String = e.node.fullpath \'将全路径的值赋于PTH1
        Dim pth As String
        Dim fl As Integer = fn.Length+1 \'计算文件名的长度并加1(\\的长度)
        Dim pl As Integer = pth1.Length  \'计算全路径的长度
        pth = pth1.SubString(0,pl-fl)  \'取全路径中除去文件名及斜杠长度的值(此即为上级目录的值)
        Dim dg As DataRow = dt.find("目录 = \'" & pth & "\'and 目录层级 = \'" & e.node.level-1 & "\'") \'查找父节点对应行
        If dg IsNot Nothing Then \'如父节点对应的行存在
            ds = dt.Find("文件名 = \'" & e.NewText & "\'And 目录层级 = \'" & i & "\' And 上级级码 = \'"& dg("级码") & "\'" ) \'判断新输入的目录名在同层级和同父目录的行中是否存在
            If ds IsNot Nothing \'如果存在,取消输入.
                MessageBox.Show("此目录已经存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.cancel = True
            Else
                
                Dim jm As String = "\'" & dg("级码") & "%\'"
                Dim lj As String = "\'" & e.Node.fullpath & "%\'"
                msgbox("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")
                For Each de In dt.Select("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")\'历遍目录列中所有需要重命名的行
                    Dim ml2 As String = de("目录").Substring(pl) \'在选出的行的目录列中,取将本层目录后的值
                    de("目录") = pth & e.newtext & ml2 \'将需要更改行中,目录列需要修改的部分修改为新名称
                    de("文件名") = e.NewText \'将本行文件名修改为新名称
                Next
                If ftp1.direxists(de("路径") & e.node.name) Then \'判断需要重命名的根目录是否存在
                    ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
                Else
                    ftp1.makedir(de("路径") & e.node.name) \'如果不存在,新建目录
                    ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
                End If
                e.Node.Name = e.NewText \'使得节点的名称和标题保持一致.
            End If
        End If
    Else \'如果不存在父目录,即为根目录
        
        ds = dt.Find("文件名 = \'" & e.NewText & "\'And 目录层级 = \'0\'" ) \'判断新输入的目录名在同层级目录的行中是否存在
        If ds IsNot Nothing \'如果存在,取消输入.
            MessageBox.Show("此目录已经存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
            e.cancel = True
        Else \'如果不存在
            Dim bml As Integer = e.node.fullpath.Length \'计算本层目录的长度
            Dim jm As String = "\'" & dr("级码") & "%\'"
            
            Dim ym As String = "\'" & e.Node.Name & "%\'"
            For Each de In dt.Select("级码 Like \'" & jm & "\' And 目录 Like " & ym & "" ) \'历遍根目录列中所有需要重命名的行
                MessageBox.Show("级码=" & jm)
                Dim ml2 As String = de("目录").Substring(bml) \'在选出的行的目录列中,取将本层目录后的值
                de("目录") = e.newtext & ml2 \'将需要更改行中,目录列需要修改的部分修改为新名称
                de("文件名") = e.NewText \'将本行文件名修改为新名称
            Next
            If ftp1.direxists(de("路径") & e.node.name) Then \'判断需要重命名的根目录是否存在
                ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
            Else
                ftp1.makedir(de("路径") & e.node.name) \'如果不存在,新建目录
                ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
            End If
            e.Node.Name = e.NewText \'使得节点的名称和标题保持一致.
        End If
    End If
End If

--  作者:有点甜
--  发布时间:2018/3/20 10:06:00
--  
修改红色代码,如果还报错,弹出每次的条件截图发上来看看。
 
Dim dt As DataTable = DataTables("档案目录管理")
If e.NewText = "" Then
    e.Cancel = True
    Return
End If
MessageBox.Show(e.node.fullpath)
Dim dr As DataRow = dt.find("目录 = \'" & e.node.fullpath & "\'and 目录层级 = \'" & e.node.level & "\'") \'查找本节点对应行
MessageBox.Show("目录=" & dr("目录"))
If dr IsNot Nothing Then  \'如果存在
    Dim ds As DataRow
    Dim de As DataRow
    Dim i As Integer = e.node.level
    If i > 0 Then
        Dim fn As String = dr("文件名")  \'将本行文件名列的值赋于FN
        Dim pth1 As String = e.node.fullpath \'将全路径的值赋于PTH1
        Dim pth As String
        Dim fl As Integer = fn.Length+1 \'计算文件名的长度并加1(\\的长度)
        Dim pl As Integer = pth1.Length  \'计算全路径的长度
        pth = pth1.SubString(0,pl-fl)  \'取全路径中除去文件名及斜杠长度的值(此即为上级目录的值)
        Dim dg As DataRow = dt.find("目录 = \'" & pth & "\'and 目录层级 = \'" & e.node.level-1 & "\'") \'查找父节点对应行
        If dg IsNot Nothing Then \'如父节点对应的行存在
            ds = dt.Find("文件名 = \'" & e.NewText & "\'And 目录层级 = \'" & i & "\' And 上级级码 = \'"& dg("级码") & "\'" ) \'判断新输入的目录名在同层级和同父目录的行中是否存在
            If ds IsNot Nothing \'如果存在,取消输入.
                MessageBox.Show("此目录已经存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.cancel = True
            Else
                
                Dim jm As String = "\'" & dg("级码") & "%\'"
                Dim lj As String = "\'" & e.Node.fullpath & "%\'"
                \'msgbox("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")
                For Each de In dt.Select("目录层级 >= \'" & i & "\' And 上级级码 Like " & jm & " And 目录 Like " & lj & "")\'历遍目录列中所有需要重命名的行
                    Dim ml2 As String = de("目录").Substring(pl) \'在选出的行的目录列中,取将本层目录后的值
                    de("目录") = pth & e.newtext & ml2 \'将需要更改行中,目录列需要修改的部分修改为新名称
                    de("文件名") = e.NewText \'将本行文件名修改为新名称
                Next
                If ftp1.direxists(de("路径") & e.node.name) Then \'判断需要重命名的根目录是否存在
                    ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
                Else
                    ftp1.makedir(de("路径") & e.node.name) \'如果不存在,新建目录
                    ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
                End If
                e.Node.Name = e.NewText \'使得节点的名称和标题保持一致.
            End If
        End If
    Else \'如果不存在父目录,即为根目录
        
        ds = dt.Find("文件名 = \'" & e.NewText & "\'And 目录层级 = \'0\'" ) \'判断新输入的目录名在同层级目录的行中是否存在
        If ds IsNot Nothing \'如果存在,取消输入.
            MessageBox.Show("此目录已经存在!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
            e.cancel = True
        Else \'如果不存在
            Dim bml As Integer = e.node.fullpath.Length \'计算本层目录的长度
            Dim jm As String = "\'" & dr("级码") & "%\'"
            
            Dim ym As String = "\'" & e.Node.Name & "%\'"
            For Each de In dt.Select("级码 Like " & jm & " And 目录 Like " & ym & "" ) \'历遍根目录列中所有需要重命名的行
                MessageBox.Show("级码=" & jm)
                Dim ml2 As String = de("目录").Substring(bml) \'在选出的行的目录列中,取将本层目录后的值
                de("目录") = e.newtext & ml2 \'将需要更改行中,目录列需要修改的部分修改为新名称
                de("文件名") = e.NewText \'将本行文件名修改为新名称
            Next
            If ftp1.direxists(de("路径") & e.node.name) Then \'判断需要重命名的根目录是否存在
                ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
            Else
                ftp1.makedir(de("路径") & e.node.name) \'如果不存在,新建目录
                ftp1.Rename(de("路径") & e.node.name,de("路径") & e.NewText) \'如果存在,修改目录名称
            End If
            e.Node.Name = e.NewText \'使得节点的名称和标题保持一致.
        End If
    End If
End If

--  作者:yzxdz750626
--  发布时间:2018/3/22 20:13:00
--  
已完美解决!谢谢!