【问题标题】:Extract Blob data from Access via vbscript通过 vbscript 从 Access 中提取 Blob 数据
【发布时间】:2015-06-19 09:58:20
【问题描述】:

所以我有一个从访问数据库中提取数据的 vbscript

例子:

db = "C:\Users\username\databases\employeeID.mdb"
TextExportFile = "C:\Users\username\databases\Exp.txt"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db

strSQL = "SELECT IDNumber+','+Name FROM employeeID "

rs.Open strSQL, cn, 3, 3

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile(TextExportFile, True)

a = rs.GetString
f.WriteLine a
f.Close

导出如下所示:

19199439,person
29034234,john

我遇到的问题是,当我将名称更改为 Blob 列时,blob 列是空白的。在访问它只是说:长二进制数据

我相信它与文本字符串与二进制字符串有关,但我不知道如何设置它来拉回该信息。

BLOB 字段中的字符串是 jpg 文件

我的最终目标是将 blob 数据的提取编写到每一列中,并使用 IDNumber 作为文件名。如果我可以得到上面的查询来导出 ID 号然后对应的 blob 数据,我可以处理剩下的。

对其他想法持开放态度,但我确实需要能够编写脚本并从访问数据库运行它(不幸的是)

(如果有人知道如何编写脚本,我什至愿意将其从访问 sql server 导出。从 sql server 我可以很容易地提取数据,但这必须是我可以编写脚本运行的东西一个月一次。

原因:access数据库是给照片id软件的,我们想把图片导出到其他软件中使用,软件就是这样存储的。

来自 Suing 提供的答案是我完成整个 shebang 的最终代码。从 access 数据库中提取 blob 数据,用相应的 Id 号命名每个 blob 字段,将 .jpg 添加到每个文件的末尾,并将其放在我需要的文件夹中。

db = "C:\Users\amoore19\databases\employeeID.mdb"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set mstream = CreateObject("ADODB.Stream")

mstream.Type = 1 ''adTypeBinary

cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db

strSQL = "SELECT AimsIDNumber,photo FROM employeeID WHERE AimsIDNumber like 'A00%' and photo is not null"

rs.Open strSQL, cn

DO WHILE not rs.eof

mstream.Open
mstream.Write rs("photo")
mstream.SaveToFile "C:\images\all\" & rs("AimsIDNumber") & ".jpg", 2 ''adSaveCreateOveWrite
mstream.close
rs.movenext

Loop

【问题讨论】:

    标签: sql ms-access vbscript blob


    【解决方案1】:

    我有幸将 Blob 值写入流文件 试试这个:

    db = "C:\Users\username\databases\employeeID.mdb"
    TextExportFile = "C:\Users\username\databases\Exp.txt"
    
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    Set mstream = CreateObject("ADODB.Stream")
    
    mstream.Type = 1 'adTypeBinary
    
    cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & db
    
    strSQL = "SELECT IDNumber,Name FROM employeeID "
    
    rs.Open strSQL, cn
    
    Do Until rs.EOF
       mstream.Open
       mstream.Write rs("Name")
       mstream.SaveToFile rs("IDNumber"), 2 'adSaveCreateOveWrite
       mstream.close
       rs.MoveNext 
    Loop
    
    
    'Set fs = CreateObject("Scripting.FileSystemObject")
    'Set f = fs.CreateTextFile(TextExportFile, True)
    'a = rs.GetString
    'f.WriteLine a
    'f.Close
    

    【讨论】:

    • 您不需要连接 IDNumber 和名称。请阅读OP的问题。 IDNumber应该是文件名,第二列(不管它的名字)是JPG文件二进制数据
    • 你好,谢谢你的评论。编辑​​已经完成
    • 所以我尝试了该代码,但在第 18 行第 1 行出现错误。错误:类型不匹配
    • 好的,我通过使我的 sql 查询更准确一点来修复错误,我添加了一个 where 语句,说明 idnumber 不为 null 并且 photo 不为 null。我不再收到错误消息,但它只导出一个 blob 文件。我要努力把它变成一个循环。任何关于如何将它变成一个循环以便遍历每一行的信息都会得到理解
    • 哦,在每个文件的末尾添加一个 .jpg 也在我的列表中 :) 以防你想帮助我:)
    猜你喜欢
    • 2015-07-28
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多