Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用经典asp3/vbscript从accdb读取附件字段_Ms Access_Vbscript_Asp Classic - Fatal编程技术网

Ms access 使用经典asp3/vbscript从accdb读取附件字段

Ms access 使用经典asp3/vbscript从accdb读取附件字段,ms-access,vbscript,asp-classic,Ms Access,Vbscript,Asp Classic,我的accdb数据库文件中有一个附件字段, 我试图读取它以提取附件,但它始终返回空值 录制到本帖 adodb没有办法做到这一点,是吗?如果是的话,我还有什么方法可以做到这一点 这是我正在运行的代码: qid = request.querystring("qid") wikiDbAddress="database/my.accdb" set cnWiki=server.CreateObject("adodb.connection") cnWiki.open "DRIVER={Microsof

我的accdb数据库文件中有一个附件字段, 我试图读取它以提取附件,但它始终返回空值

录制到本帖 adodb没有办法做到这一点,是吗?如果是的话,我还有什么方法可以做到这一点

这是我正在运行的代码:

qid = request.querystring("qid")
wikiDbAddress="database/my.accdb"

set cnWiki=server.CreateObject("adodb.connection")  
cnWiki.open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};  DBQ=" & Server.MapPath(root&wikiDbAddress)

SQL = "select * from [Knowledge Base] where id="&qid

RS.Open SQL, cnWiki

do while not RS.eof 
    response.write RS("attachments")
    RS.movenext
loop

现在,我做了一些有帮助的变通方法,虽然效率不高,但确实有效

qid = request.querystring("qid")
name = request.querystring("name")



SQL = "select Attachments.FileName as fname, Attachments.FileData as data, Attachments.FileType as FileType from [Knowledge Base] where Attachments.FileName='"&name&"' and id="&qid

RS.Open SQL, cnWiki


do while not RS.eof 
    if rs("fname")= name then   
        filename = Server.MapPath("/KB_"&qid&"_"&rs("fname"))
        set fs=Server.CreateObject("Scripting.FileSystemObject")
        if not fs.FileExists(filename) then
            SaveBinaryData filename, rs("data") 
            data = readBinary(filename)
            ' CHR(255) = FF, CHR(170) = AA
            data = Mid(data, 21, Len(data) - 20)
            writeBinary data,filename                
        end if
        set fs=nothing                              
        downloadFromFile(filename )
        exit do
    else        
        RS.movenext
    end if
loop
rs.close
cnWiki.close
function downloadFromFile(strFile )
    Dim objConn
    Dim intCampaignRecipientID

    If strFile <> "" Then           
        Dim objStream
        Set objStream = Server.CreateObject("ADODB.Stream")
        objStream.Type = 1 'adTypeBinary
        objStream.Open
        objStream.LoadFromFile(strFile)
        Response.Clear 
        'Response.ContentType = "image/jpeg"
        Response.Addheader "Content-Disposition", "attachment; filename=" & strFile
        Response.BinaryWrite objStream.Read
        objStream.Close
        Set objStream = Nothing

    End If
End Function    

Function SaveBinaryData(FileName, ByteArray)
  Const adTypeBinary = 1
  Const adSaveCreateOverWrite = 2

  'Create Stream object
  Dim BinaryStream
  Set BinaryStream = CreateObject("ADODB.Stream")

  'Specify stream type - we want To save binary data.
  BinaryStream.Type = adTypeBinary

  'Open the stream And write binary data To the object
  BinaryStream.Open
  BinaryStream.Write ByteArray

  'Save binary data To disk
  BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
End Function
Function readBinary(path)
    Dim a, fso, file, i, ts
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.getFile(path)
    If isNull(file) Then
        wscript.echo "File not found: " & path
        Exit Function
    End If
    Set ts = file.OpenAsTextStream()
    a = makeArray(file.size)
    i = 0
    While Not ts.atEndOfStream
       a(i) = ts.read(1)
       i = i + 1
    Wend
    ts.close
    readBinary = Join(a,"")
 End Function


 Sub writeBinary(bstr, path)
     Dim fso, ts
     Set fso = CreateObject("Scripting.FileSystemObject")
     On Error Resume Next
     Set ts = fso.createTextFile(path)
     If Err.number <> 0 Then
        wscript.echo Err.message
        Exit Sub
     End If
     On Error GoTo 0
     ts.Write(bstr)
     ts.Close
 End Sub

Function makeArray(n)
    Dim s
    s = Space(n)
    makeArray = Split(s," ")
End Function
qid=request.querystring(“qid”)
name=request.querystring(“name”)
SQL=“从[Knowledge Base]中选择Attachments.FileName作为fname,Attachments.FileData作为数据,Attachments.FileType作为文件类型,其中Attachments.FileName=”“&name&”,id=“&qid
开放式SQL,cnWiki
做而不做
如果rs(“fname”)=名称,则
filename=Server.MapPath(“/KB\uquo&qid&”\uquo&rs(“fname”))
设置fs=Server.CreateObject(“Scripting.FileSystemObject”)
如果不存在fs.FileExists(文件名),则
SaveBinaryData文件名,rs(“数据”)
data=readBinary(文件名)
'CHR(255)=FF,CHR(170)=AA
数据=Mid(数据,21,透镜(数据)-20)
可写二进制数据,文件名
如果结束
设置fs=nothing
下载自文件(文件名)
退出do
其他的
下一个
如果结束
环
克洛斯
cnWiki.close
函数下载自文件(strFile)
模糊对象
Dim IntractiveRecipientId
如果是strFile“”,则
暗流
设置objStream=Server.CreateObject(“ADODB.Stream”)
objStream.Type=1'adTypeBinary
对象流。打开
objStream.LoadFromFile(strFile)
回答,清楚
'Response.ContentType=“image/jpeg”
Response.Addheader“内容处置”,“附件;文件名=”&strFile
Response.BinaryWrite objStream.Read
objStream,关闭
设置objStream=Nothing
如果结束
端函数
函数SaveBinaryData(文件名,ByteArray)
常量adTypeBinary=1
常量adSaveCreateOverWrite=2
'创建流对象
暗二进制流
Set BinaryStream=CreateObject(“ADODB.Stream”)
'指定流类型-我们要保存二进制数据。
BinaryStream.Type=adTypeBinary
'打开流并将二进制数据写入对象
二进制流,打开
BinaryStream.Write ByteArray
'将二进制数据保存到磁盘
BinaryStream.SaveToFile文件名,adSaveCreateOverWrite
端函数
函数readBinary(路径)
尺寸a、fso、文件、i、ts
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set file=fso.getFile(路径)
如果isNull(文件),则
wscript.echo“未找到文件:”&路径
退出功能
如果结束
设置ts=file.OpenAsTextStream()
a=makeArray(file.size)
i=0
而不是ts.atEndOfStream
a(i)=ts.read(1)
i=i+1
温德
关闭
readBinary=Join(a,“”)
端函数
子写二进制(bstr,路径)
暗色fso,ts
设置fso=CreateObject(“Scripting.FileSystemObject”)
出错时继续下一步
设置ts=fso.createTextFile(路径)
如果错误号为0,则
wscript.echo Err.message
出口接头
如果结束
错误转到0
ts.Write(bstr)
关闭
端接头
函数makeArray(n)
暗淡的
s=空间(n)
makeArray=Split(s,“”)
端函数

目前,我做了一些变通方法,这些方法对我有所帮助,虽然效率不高,但确实有效

qid = request.querystring("qid")
name = request.querystring("name")



SQL = "select Attachments.FileName as fname, Attachments.FileData as data, Attachments.FileType as FileType from [Knowledge Base] where Attachments.FileName='"&name&"' and id="&qid

RS.Open SQL, cnWiki


do while not RS.eof 
    if rs("fname")= name then   
        filename = Server.MapPath("/KB_"&qid&"_"&rs("fname"))
        set fs=Server.CreateObject("Scripting.FileSystemObject")
        if not fs.FileExists(filename) then
            SaveBinaryData filename, rs("data") 
            data = readBinary(filename)
            ' CHR(255) = FF, CHR(170) = AA
            data = Mid(data, 21, Len(data) - 20)
            writeBinary data,filename                
        end if
        set fs=nothing                              
        downloadFromFile(filename )
        exit do
    else        
        RS.movenext
    end if
loop
rs.close
cnWiki.close
function downloadFromFile(strFile )
    Dim objConn
    Dim intCampaignRecipientID

    If strFile <> "" Then           
        Dim objStream
        Set objStream = Server.CreateObject("ADODB.Stream")
        objStream.Type = 1 'adTypeBinary
        objStream.Open
        objStream.LoadFromFile(strFile)
        Response.Clear 
        'Response.ContentType = "image/jpeg"
        Response.Addheader "Content-Disposition", "attachment; filename=" & strFile
        Response.BinaryWrite objStream.Read
        objStream.Close
        Set objStream = Nothing

    End If
End Function    

Function SaveBinaryData(FileName, ByteArray)
  Const adTypeBinary = 1
  Const adSaveCreateOverWrite = 2

  'Create Stream object
  Dim BinaryStream
  Set BinaryStream = CreateObject("ADODB.Stream")

  'Specify stream type - we want To save binary data.
  BinaryStream.Type = adTypeBinary

  'Open the stream And write binary data To the object
  BinaryStream.Open
  BinaryStream.Write ByteArray

  'Save binary data To disk
  BinaryStream.SaveToFile FileName, adSaveCreateOverWrite
End Function
Function readBinary(path)
    Dim a, fso, file, i, ts
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.getFile(path)
    If isNull(file) Then
        wscript.echo "File not found: " & path
        Exit Function
    End If
    Set ts = file.OpenAsTextStream()
    a = makeArray(file.size)
    i = 0
    While Not ts.atEndOfStream
       a(i) = ts.read(1)
       i = i + 1
    Wend
    ts.close
    readBinary = Join(a,"")
 End Function


 Sub writeBinary(bstr, path)
     Dim fso, ts
     Set fso = CreateObject("Scripting.FileSystemObject")
     On Error Resume Next
     Set ts = fso.createTextFile(path)
     If Err.number <> 0 Then
        wscript.echo Err.message
        Exit Sub
     End If
     On Error GoTo 0
     ts.Write(bstr)
     ts.Close
 End Sub

Function makeArray(n)
    Dim s
    s = Space(n)
    makeArray = Split(s," ")
End Function
qid=request.querystring(“qid”)
name=request.querystring(“name”)
SQL=“从[Knowledge Base]中选择Attachments.FileName作为fname,Attachments.FileData作为数据,Attachments.FileType作为文件类型,其中Attachments.FileName=”“&name&”,id=“&qid
开放式SQL,cnWiki
做而不做
如果rs(“fname”)=名称,则
filename=Server.MapPath(“/KB\uquo&qid&”\uquo&rs(“fname”))
设置fs=Server.CreateObject(“Scripting.FileSystemObject”)
如果不存在fs.FileExists(文件名),则
SaveBinaryData文件名,rs(“数据”)
data=readBinary(文件名)
'CHR(255)=FF,CHR(170)=AA
数据=Mid(数据,21,透镜(数据)-20)
可写二进制数据,文件名
如果结束
设置fs=nothing
下载自文件(文件名)
退出do
其他的
下一个
如果结束
环
克洛斯
cnWiki.close
函数下载自文件(strFile)
模糊对象
Dim IntractiveRecipientId
如果是strFile“”,则
暗流
设置objStream=Server.CreateObject(“ADODB.Stream”)
objStream.Type=1'adTypeBinary
对象流。打开
objStream.LoadFromFile(strFile)
回答,清楚
'Response.ContentType=“image/jpeg”
Response.Addheader“内容处置”,“附件;文件名=”&strFile
Response.BinaryWrite objStream.Read
objStream,关闭
设置objStream=Nothing
如果结束
端函数
函数SaveBinaryData(文件名,ByteArray)
常量adTypeBinary=1
常量adSaveCreateOverWrite=2
'创建流对象
暗二进制流
Set BinaryStream=CreateObject(“ADODB.Stream”)
'指定流类型-我们要保存二进制数据。
BinaryStream.Type=adTypeBinary
'打开流并将二进制数据写入对象
二进制流,打开
BinaryStream.Write ByteArray
'将二进制数据保存到磁盘
BinaryStream.SaveToFile文件名,adSaveCreateOverWrite
端函数
函数readBinary(路径)
尺寸a、fso、文件、i、ts
设置fso=CreateObject(“Scripting.FileSystemObject”)
Set file=fso.getFile(路径)
如果isNull(文件),则
wscript.echo“未找到文件:”&路径
退出功能
如果结束
设置ts=file.OpenAsTextStream()
a=makeArray(file.size)
i=0
而不是ts.atEndOfStream
a(i)=ts.read(1)
i=i+1
温德
关闭
readBinary=Join(a,“”)
端函数
子写二进制(bstr,路径)
暗色fso,ts
设置fso=CreateObject(“Scripting.Fi