ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 614|回复: 4

[求助] SQL 相片保存

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-19 14:43 | 显示全部楼层 |阅读模式
本帖最后由 tcy119 于 2019-10-19 14:44 编辑

求助:字段太小而不能接受所要添加的数据的数量,不知道什么原因,请高手帮助解决,谢谢!
Sub SavePic()
    Dim BtArr() As Byte
    Dim PicPath As String
    Dim PicName As String
    Dim SQL As String
    Dim Fn As Integer
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim myPath As String
    Dim myTable As String
    'Dim PicSum As Long
   Path = ThisWorkbook.Path & "\学校管理.xlsx"
    If Dir(myPath) = "" Then
    MsgBox ("ON")
    End If
   
    myTable = "学生档案"
    Set cnn = New ADODB.Connection
        With cnn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = "Extended Properties=Excel 12.0;" _
                & "Data Source=" & Path
            .Open
        End With
        Set rst = New ADODB.Recordset
      SQL = "select 学生编号,相片 from [学生档案$] Where IsNull(相片)= True"
        rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
   
   
    On Error GoTo ErrMsg
       Do Until rst.EOF
        PicName = rst(0)
        PicPath = Dir(ThisWorkbook.Path & "\pic\" & PicName & ".*")
        If Len(PicPath) <> 0 Then
            PicPath = ThisWorkbook.Path & "\pic\" & PicPath
            Fn = FreeFile
            Open PicPath For Binary As #Fn
            ReDim BtArr(LOF(Fn) - 1)
            Get #Fn, , BtArr
            Close #Fn
            rst("相片") = BtArr
            PicSum = PicSum + 1
        End If
        rst.MoveNext
    Loop
    MsgBox "共有 " & PicSum & " 张相片存入数据库" & vbCr _
    & "还有 " & rst.RecordCount - PicSum & " 人未提供相片", , "保存相片"
    Exit Sub
ErrMsg:
    MsgBox Err.Description, , "错误报告"
End Sub

SQL存照片.rar

845.7 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2019-10-20 10:55 | 显示全部楼层
本帖最后由 opiona 于 2019-10-20 11:52 编辑

你这是要在单元格内保存相片的文件流么

如果一定要将照片文件保存在数据库内
建议用ACCESS的OLE对象保存

426楼:http://club.excelhome.net/thread-1409141-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-20 19:19 | 显示全部楼层
opiona 发表于 2019-10-20 10:55
你这是要在单元格内保存相片的文件流么

如果一定要将照片文件保存在数据库内

由于审核没有能及时回复,不好意思,多谢,但我不太懂ACCESS,所以还是另想办法。

TA的精华主题

TA的得分主题

发表于 2019-10-21 09:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
那就试试插入对象:
  1.         PathG = ThisWorkbook.Path & "" & SH1.Cells(I, 4).Value & ".docx" '//指定文件路径
  2.    
  3.         If FSO.FileExists(PathG) = True Then   '//如果文件存在
  4.            Rem 对象文件名,对象链接到该文件,图标或正常图片方式,指定图标文件,图标序号,图标下方显示一个标签
  5.            Rem 指定位置和大小,图标就不会相互重叠  最后还有个括号
  6.            
  7.            Set RA = SH1.Range("E" & I)
  8.            Set Obj = SH1.OLEObjects.Add(Filename:=PathG, Link:=True, DisplayAsIcon:=True _
  9.             , IconFileName:=ThisWorkbook.Path & "\ICO.ICO", IconIndex:=0, IconLabel:=PathG _
  10.             , Left:=RA.Left + 3 _
  11.             , Top:=RA.Top + 3 _
  12.             , Height:=SH1.Rows(RA.Row).RowHeight - 6 _
  13.             , Width:=RA.Width - 6 _
  14.             )
  15.             With Obj
  16.                 .Select '//声明为:Obj 是为了可能的其他操作
  17.                 Rem 把行高改为与图标文件一样高,图标就不会相互重叠
  18.                 SH1.Rows(I).RowHeight = .Height + 6
  19.             End With
  20.         Else
  21.             SH1.Cells(I, 5).Value = "没有此文件"
  22.         End If
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-22 22:00 | 显示全部楼层
opiona 发表于 2019-10-21 09:19
那就试试插入对象:

真想不到老师这么热心,但还不能用, 谢谢!非常感谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-23 22:58 , Processed in 0.039109 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表