Office中国论坛/Access中国论坛

标题: 用ADO参数查询添加OLE字段值出错[已解决] [打印本页]

作者: t小宝    时间: 2011-12-8 21:50
标题: 用ADO参数查询添加OLE字段值出错[已解决]
本帖最后由 t小宝 于 2011-12-10 11:49 编辑

表1中有OLE字段oo,以下代码用ADO的参数查询向oo字段添加一个二进制文件,
在 prmByRoyalty.AppendChunk ByteData() 句出错,望各路高手指点。

Public Function AppendFile()

    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim FileLength As Long
    Dim ByteData() As Byte

    Open "C:\test.rar" For Binary Access Read Lock Write As #1
    FileLength = LOF(1)
    ReDim ByteData(FileLength)
    Get #1, , ByteData()
    Close #1

    Set cmdByRoyalty = New ADODB.Command
    With cmdByRoyalty
        .CommandText = "PARAMETERS oleA LongBinary;INSERT INTO 表1 ( oo ) VALUES([oleA]);" '
        .CommandType = adCmdText
        Set prmByRoyalty = .CreateParameter("oleA", adLongVarBinary, adParamInput, FileLength)
        cmdByRoyalty.Parameters.Append prmByRoyalty
        prmByRoyalty.AppendChunk ByteData()            ' 出错,
        Set .ActiveConnection = CurrentProject.Connection
        .Execute
    End With
   
End Function

问题已经解决,是ReDim ByteData(FileLength) 多声明了一个字节,改为ReDim ByteData(FileLength-1)
,完整代码见4楼。

作者: xuwenning    时间: 2011-12-9 08:16
谢谢分享
学习了
作者: 鱼儿游游    时间: 2011-12-9 23:33
本帖最后由 鱼儿游游 于 2011-12-9 23:45 编辑

binary是定长的数组,应该用text,image等好些。

AppendChunk 好象不支持binary类型。
作者: t小宝    时间: 2011-12-10 10:04
本帖最后由 t小宝 于 2011-12-10 11:48 编辑
鱼儿游游 发表于 2011-12-9 23:33
binary是定长的数组,应该用text,image等好些。

AppendChunk 好象不支持binary类型。


字段类型没有错,问题已经找到,是ReDim ByteData(FileLength) 多声明了一个字节,改为ReDim ByteData(FileLength-1)
就可以了。
正确的代码如下:
  1. Public Function AppendFile()

  2.     Dim cmdByRoyalty As ADODB.Command
  3.     Dim prmByRoyalty As ADODB.Parameter
  4.     Dim FileLength As Long
  5.     Dim ByteData() As Byte

  6.     Open "C:\test.rar" For Binary Access Read Lock Write As #1
  7.     FileLength = LOF(1)
  8.     ReDim ByteData(FileLength-1)
  9.     Get #1, , ByteData()
  10.     Close #1

  11.     Set cmdByRoyalty = New ADODB.Command
  12.     With cmdByRoyalty
  13.         .CommandText = "PARAMETERS oleA LongBinary;INSERT INTO 表1 ( oo ) VALUES([oleA]);"
  14.         .CommandType = adCmdText
  15.         Set prmByRoyalty = .CreateParameter("oleA", adLongVarBinary, adParamInput, FileLength)
  16.         .Parameters.Append prmByRoyalty
  17.         prmByRoyalty.AppendChunk ByteData()            
  18.         Set .ActiveConnection = CurrentProject.Connection
  19.         .Execute
  20.     End With
  21.    
  22. End Function
复制代码





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3