以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]动态插入图片代码错误  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118660)

--  作者:倪远歌1
--  发布时间:2018/5/8 14:57:00
--  [求助]动态插入图片代码错误
目标是从指定文件夹下打开当前行、产品编码列对应的文件夹,
选中图片后保存“照片”列中,已经设置了“照片”列的动态保存目录,在attachment\\photo文件夹下
做了一个按钮,现代码如下:
If CurrentTable.Current("产品编码")  IsNot Nothing Then
    Dim dlg As New OpenFileDialog
    dlg.MultiSelect = True
    dlg.InitialDirectory ="E:\\图片库\\" & CurrentTable.Current("产品编码")
    If dlg.ShowDialog = DialogResult.OK Then
        Dim dr As DataRow = Tables("数据库").Current.DataRow
        Dim fl As String = dlg.FileName
        dr.SQLInsertFile("照片",fl)
    End If
Else
    MessageBox.Show(CurrentTable.Current("产品编码")& "照片未找到!", "提示")
End If

点击按钮后发现
如果产品编码有对应的文件夹则能打开E:\\图片库”下对应的产品文件夹
如果产品编码为空,或者在“E:\\图片库”下没有对应的产品编码文件夹,依然可以打开其他产品编码对应的文件夹,没有提示照片未找到
而且图片插入不成功。

求大神指点


--  作者:有点蓝
--  发布时间:2018/5/8 15:23:00
--  
OpenFileDialog不会有任何提示的,如果不存在就打开默认的目录

如果要判断文件夹是否存在,使用:http://www.foxtable.com/webhelp/scr/0334.htm

判断单元格是否为空,尽量这样判断
If CurrentTable.Current.isnull("产品编码") = false Then

--  作者:倪远歌1
--  发布时间:2018/5/8 17:22:00
--  
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.InitialDirectory ="E:\\图片库\\" & CurrentTable.Current("产品编码")
If FileSys.DirectoryExists(dlg.InitialDirectory) AndAlso  dlg.ShowDialog = DialogResult.OK Then
    Dim dr As DataRow = Tables("数据库").Current.DataRow
    Dim fs As String = ProjectPath & "attachment\\photo\\" & CurrentTable.Current("产品编码")
    Dim fn As String = dlg.FileName
    If FileSys.DirectoryExists(fs) Then
        For Each f As String In dlg.FileNames
            FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
            dr.SQLInsertFile("照片",fs)
        Next
    Else
        FileSys.CreateDirectory(fs)
        For Each f As String In dlg.FileNames
            FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
            dr.SQLInsertFile("照片",fs)
        Next
    End If
End If


还是不行,越看越不懂了

--  作者:有点甜
--  发布时间:2018/5/8 18:59:00
--  

执行下面代码,能否拷贝文件到photo文件夹?

 

你图片列,是二进制列,还是字符列?

 

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.InitialDirectory ="E:\\图片库\\" & CurrentTable.Current("产品编码")
If dlg.ShowDialog = DialogResult.OK Then
    Dim dr As DataRow = Tables("数据库").Current.DataRow
    Dim fs As String = ProjectPath & "attachment\\photo\\" & CurrentTable.Current("产品编码")
    Dim fn As String = dlg.FileName
    If FileSys.DirectoryExists(fs) Then
        For Each f As String In dlg.FileNames
            FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
            \'dr.SQLInsertFile("照片",fs)
        Next
    Else
        FileSys.CreateDirectory(fs)
        For Each f As String In dlg.FileNames
            FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
            \'dr.SQLInsertFile("照片",fs)
        Next
    End If
End If


--  作者:倪远歌1
--  发布时间:2018/5/9 9:00:00
--  
是字符列,文件并没有复制到photo文件夹下,
提示“未将对象引用设置到对象的实例”

--  作者:有点甜
--  发布时间:2018/5/9 9:06:00
--  

这样试试

 

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
Dim t As Table = Tables("数据库")
If t.current IsNot Nothing Then
    dlg.InitialDirectory ="E:\\图片库\\" & t.Current("产品编码")
    If dlg.ShowDialog = DialogResult.OK Then
        Dim dr As DataRow = t.Current.DataRow
        Dim fs As String = ProjectPath & "attachment\\photo\\" & t.Current("产品编码")
        Dim fn As String = dlg.FileName
        If FileSys.DirectoryExists(fs) Then
            For Each f As String In dlg.FileNames
                FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
                \'dr.SQLInsertFile("照片",fs)
            Next
        Else
            FileSys.CreateDirectory(fs)
            For Each f As String In dlg.FileNames
                FileSys.CopyFile(f, fs & FileSys.GetName(f), True)
                \'dr.SQLInsertFile("照片",fs)
            Next
        End If
    End If
else
    msgbox("表格数据为空")
end if


--  作者:倪远歌1
--  发布时间:2018/5/9 11:16:00
--  
刚刚少打了一个& "\\" &
这样
FileSys.CopyFile(f, fs & "\\" & FileSys.GetName(f), True)
可以把照片顺利复制到指定文件夹,
但是因为“照片”列不是二进制列所以照片插入不成功。
除了SQLInsertFile 还有其他方法向照片列插入照片吗?



--  作者:有点甜
--  发布时间:2018/5/9 11:20:00
--  

dr.SQLInsertFile("照片",fs)

 

改成

 

dr.lines("照片") = dr.lines("照片").Add("photo\\" & t.Current("产品编码") & "\\" & FileSys.GetName(f))

 


--  作者:倪远歌1
--  发布时间:2018/5/9 13:58:00
--  
提示错误,表达式不产生任何值?
???

--  作者:有点甜
--  发布时间:2018/5/9 14:34:00
--  
                Dim ls = dr.lines("照片")
                ls.Add("photo\\" & t.Current("产品编码") & "\\" & FileSys.GetName(f))
                dr.lines("照片") = ls