以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]FTP事件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129568)

--  作者:天一生水
--  发布时间:2019/1/1 10:21:00
--  [求助]FTP事件
单文件列[上传笔录],希望上传到ftp的  根目录"\\笔录\\"   的  子目录"承办人";然后将文件名变更为统一格式  “/笔录/承办人/案号.doc”。
先设置列属性,根目录为"\\笔录\\" 。

1、BeforeUpload(上传文件之前)代码:

DataTables("数据表").DataCols("上传笔录").ExtendType = ExtendTypeEnum.FILES

DataTables("数据表").DataCols("上传笔录").Remote = True

DataTables("数据表").DataCols("上传笔录").FTPClient.Host ="192.168.*.*"

DataTables("数据表").DataCols("上传笔录").FTPClient.Account = "***"

DataTables("数据表").DataCols("上传笔录").FTPClient.password = "1******1"


2、BeforeListDetails(列出文件和目录之前)代码:

Dim dr As Row = Tables("数据表").Current

If dr("承办人") <> Nothing Then

    For Each Info() As String In e.Infos

        If Info(0) <> dr("承办人") Then \'隐藏不是当前承办人的子目录

            e.Remove(Info)

        End If        

        

        If Info(0).Contains(dr("承办人")) = False Then  \'如果不存在当前承办人的子目录,就创建一个

            Dim ftp1 As New FtpClient

            ftp1.Host="192.168.*.***"

            ftp1.Account = "***"

            ftp1.Password = "1******1"

            ftp1.MakeDir("\\笔录\\" & dr("承办人"))

        End If

        

    Next

End If


3、文件重命名:

...代码不会写


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


问题:

1、如果不存在当前承办人的子目录,就创建一个,没运行;

2、点击单元格按钮,有时候先出现“文件管理窗口”,有时候直接弹出ftp窗口;

3、弹出的ftp窗口,现在显示的是“承办人”子目录,怎样打开ftp窗口直接进入“承办人”子目录?

4、用户的权限是完全控制,在ftp窗口选择上传文件后,点击确认,为什么上传不成功?

5、怎样将文件名变更为统一格式  “/笔录/承办人/案号.doc”。




--  作者:有点甜
--  发布时间:2019/1/2 10:00:00
--  

1、创建代码,请写到beforeupload事件去。

 

2、肯定是先弹出【文件管理窗口】的,请认真测试。

 

3、动态设置更目录rootdir以及Changedir

 

http://www.foxtable.com/webhelp/scr/1410.htm

 

4、上传不成功肯定是你ftp没有设置正确,提示什么错?

 

5、在afterupload事件,重命名。


--  作者:天一生水
--  发布时间:2019/1/2 21:41:00
--  
1、创建代码,请写到beforeupload事件去。
但是黑色代码中的  Info()  不是beforeupload成员,怎样判断,重建呢?

Dim dr As Row = Tables("数据表").Current

If dr("承办人") <> Nothing Then

    For Each Info() As String In e.Infos

        If Info(0) <> dr("承办人") Then \'隐藏不是当前承办人的子目录

            e.Remove(Info)

        End If        

        

        If Info(0).Contains(dr("承办人")) = False Then  \'如果不存在当前承办人的子目录,就创建一个

            Dim ftp1 As New FtpClient

            ftp1.Host="192.168.*.***"

            ftp1.Account = "***"

            ftp1.Password = "1******1"

            ftp1.MakeDir("\\笔录\\" & dr("承办人"))

        End If

        

    Next

End If


--  作者:有点甜
--  发布时间:2019/1/2 21:43:00
--  

判断是否存在文件夹,参考

 

DirExists

 

http://www.foxtable.com/webhelp/scr/1410.htm

 


--  作者:天一生水
--  发布时间:2019/1/2 23:18:00
--  
谢谢甜老师!
上传文件可以到ftp文件夹,但是文件列为什么不显示?
Rename的currentName参数怎样定义?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试ftp.foxdb


现在的代码:
1、BeforeUpload    -创建子目录,变更根目录
Dim dr As Row = Tables("数据表").Current
Dim ftp1 As New FtpClient

ftp1.Host="192.168.*.***"

ftp1.Account = "***"

ftp1.Password = "1******1"

If ftp1.DirExists("\\笔录\\" & dr("承办人")) Then    \'如果存在承办人子目录
    ftp1.Changedir("\\笔录\\" & dr("承办人"))        \'重新设定根目录
Else
    ftp1.MakeDir("\\笔录\\" & dr("承办人"))          \'创建子目录
    ftp1.Changedir("\\笔录\\" & dr("承办人"))
End If
’ftp1.OpenManager()

2、AfterUpload   ----文件重命名,currentName怎样定义?
Dim dr As Row = Tables("数据表").Current
Dim ftp1 As new  ftpclient

ftp1.Host="192.168.*.***"

ftp1.Account = "***"

ftp1.Password = "1******1"

If ftp1.Rename(currentName,"\\笔录\\" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc")

3、BeforeListDetails   ------隐藏目录
Dim dr As Row = Tables("数据表").Current
If dr("承办人") <> Nothing Then
    For Each Info() As String In e.Infos
        If Info(0) <> dr("承办人") Then \'隐藏不是当前承办人的子目录
            e.Remove(Info)
        End If
    Next
End If


--  作者:有点甜
--  发布时间:2019/1/3 9:16:00
--  

1、

 

If ftp1.Rename(currentName,"\\笔录\\" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc")

 

改成

 

msgbox(CurFolder & "/" & filesys.getname(LocalFile))

If ftp1.Rename(CurFolder & "/" & filesys.getname(LocalFile),"\\笔录\\" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc")

 

2、AfterUpload 事件,给表格赋值,如

 

dr("上传笔录") = "\\笔录\\" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc"

 


--  作者:天一生水
--  发布时间:2019/1/3 22:11:00
--  
老师好!
经测试,仍存在下列问题,请老师帮助看一下,是哪里的问题。
谢谢!

1、BeforeListDetails   ------隐藏目录
这段代码不仅隐藏了不是当前承办人的子目录,当前承办人文件夹内的文件也看不到了;
Dim dr As Row = Tables("数据表").Current
If dr("承办人") <> Nothing Then
    For Each Info() As String In e.Infos
        If Info(0) <> dr("承办人") Then \'隐藏不是当前承办人的子目录
            e.Remove(Info)
        End If
    Next
End If

2、BeforeUpload    -创建子目录,变更根目录
这段代码变换不同承办人所在的行时,仍然保持上一次打开的目录,加上黑体代码也不能纠正;
Dim dr As Row = Tables("数据表").Current
Dim ftp1 As New FtpClient
ftp1.Host="192.168.*.***"
ftp1.Account = "***"
ftp1.Password = "1******1"
ftp1.RootDir =("\\笔录")
If ftp1.DirExists("\\笔录\\" & dr("承办人")) Then    \'如果存在承办人子目录
    ftp1.ChangeDir("\\笔录\\" & dr("承办人"))        \'重新设定根目录
Else
    ftp1.MakeDir("\\笔录\\" & dr("承办人"))          \'创建子目录
    ftp1.Changedir("\\笔录\\" & dr("承办人"))
End If

3、AfterUpload   ----文件重命名
msgbox弹出的值正确,但是上传进ftp目录的文件没有被重命名。
Dim dr As Row = Tables("数据表").Current
Dim ftp1 As new  ftpclient
ftp1.Host="192.168.*.***"
ftp1.Account = "***"
ftp1.Password = "1******1"
msgbox(e.CurFolder & "/" & filesys.getname(e.LocalFile))
ftp1.Rename(e.CurFolder & "/" & filesys.getname(e.LocalFile),"\\笔录" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc")
dr("上传笔录") = "\\笔录" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc"     \'文件列单元格赋值

-------------------
说明:
1、ftp的文件目录结构:
F:\\ftp\\笔录\\(承办人命名的)子目录\\(案号命名的).doc

2、点击单元格按钮,直接打开了ftp的“选择文件”窗口,对不对?
操作实录:

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

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



[此贴子已经被作者于2019/1/3 22:12:06编辑过]

--  作者:有点甜
--  发布时间:2019/1/3 22:35:00
--  

1、

 

Dim dr As Row = Tables("数据表").Current
For Each Info() As String In e.Infos
    If Info(0).contains(dr("承办人")) = False Then \'隐藏不是当前承办人的子目录
        e.Remove(Info)
    End If
Next
 
2、你在切换行事件 currentChanged事件或者相关的时间,切换根目录即可
 
3、rename如果没有报错,说明就是重命名了的,你刷新一下窗口看看最新结果

--  作者:天一生水
--  发布时间:2019/1/4 21:05:00
--  
老师好!
1、运行下面的代码,用Rename重命名时,出现这种情况:上传至ftp目录下的文件被重命名了,但是ftp“文件选择”窗口中的文件名没变化,要点击一下窗口中的“刷新”按钮,才能显示重命名的文件。否则,如果直接点击窗口中的“确定”按钮,写入单元格的值将是未重命名的文件名。
能不能写句代码代替点击“刷新”按钮?
Dim ftp1 As New FtpClient
ftp1.Host="127.0.0.1"
ftp1.Account = "***"
ftp1.Password = "1******1"
msgbox(e.CurFolder & "/" & filesys.getname(e.LocalFile))
ftp1.Rename(e.CurFolder & "/" & filesys.getname(e.LocalFile),"\\笔录" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc")
dr("上传笔录") = "\\笔录" & "\\" & dr("承办人") & "\\" & dr("案号") & ".doc"     \'文件列单元格赋值

此主题相关图片如下:截屏图片.jpg
按此在新窗口浏览图片


2、删除ftp文件不起作用,麻烦老师看一下。
代码是表的DataColChanged,e.DataRow("上传笔录")显示的是ftp文件的全路径文件名
If e.DataCol.Name = "上传笔录"  Then  \'
    If e.OldValue > "" AndAlso e.NewValue = Nothing Then
        Dim ftp1 As New FtpClient
        ftp1.Host="127.0.0.1"
        ftp1.Account = "***"
        ftp1.Password = "1******1"
        ftp1.DeleteFile(e.DataRow("上传笔录"))
    End If
End  If

--  作者:有点蓝
--  发布时间:2019/1/4 21:10:00
--  
1、这个没有办法控制,建议还是使用窗口文件管理控件操作

2、ftp1.DeleteFile(e.OldValue)