【问题标题】:Extract picture (.jpg or .png) from Access with Excel VBA使用 Excel VBA 从 Access 中提取图片(.jpg 或 .png)
【发布时间】:2021-05-13 19:11:06
【问题描述】:

我想从 Access 的“附件”字段中将图片(.jpg、.png)插入 Excel 工作表。

我当前的代码是这样的:

Sub InsertPicFromAccessDB()

    Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset
    
    Set con = New ADODB.Connection
    Set rs = New ADODB.Recordset
    
    con.ConnectionString = ConStrAccess
    con.Open
    
    
    With rs
        .ActiveConnection = con
        .Source = "SELECT ProdutoFoto FROM tblProduto WHERE ProdutoFoto=2163150;"
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
        .Open
        
    End With
    
    shStockNovo.Range("A57").Value = rs.Fields(0).Value
    rs.Close
    con.Close
End Sub

它不会从数据库上传图像。

我已经搜索过其他替代方案,其中一个建议是使用 ADODB.Sream。 但它在“ADODB.Stream.Write”上给了我一个错误(根据我的研究,没有人能解决这个问题)。 这是“运行时错误‘3001’参数类型错误、超出可接受范围或相互冲突。”

【问题讨论】:

标签: excel ms-access vba7


【解决方案1】:

Excel VBA 中的代码用于从 Access 附件字段中提取图像文件并保存到文件夹,然后嵌入 Excel 工作表中。

  1. 首先为 Microsoft DAO x.x 对象库Microsoft Office x.x Access 数据库引擎对象库

    设置引用
  2. 示例代码

Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset, rsP As Variant, strFile As String
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\path\filename.accdb")
Set rs = db.OpenRecordset("SELECT ProdutoFoto FROM tblProduto WHERE ProdutoFoto=2163150")
Set rsP = rs.Fields("ProdutoFoto").Value
rsP.Fields("FileData").SaveToFile "C:\Path"
strFile = rsP.Fields("FileName")
shStockNovo.Range("A57").Select
shStockNovo.Pictures.Insert ("C:\path\" & strFile)

【讨论】:

  • 不幸的是,我已经尝试过了,但在加载 DLL 时出现错误。我检查了 ADO 6.1 库、VB 脚本正则表达式、Outlook、Internet 控件和 HTML 对象库引用。我认为这不会干扰错误。
  • 我明白了。我必须参考 Microsoft Office 16.0 Access 数据库引擎对象库。
  • 我不必选择那个库。因此,只需测试并使用所选的任一库即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多