On Error GoTo errh:
这句是不是搞错了,多了个冒号

解决方案 »

  1.   

    另外你可以试试用oo4o来做,我在vb下做了一个,不过有点小问题,可以一起讨论。
      

  2.   

    这个问题有人说ADO的UPDATE只支持小64KB,但我查了好多书也没有看到这方面的介绍,我想一定有办法来解决得。可能是在什么地方设置吧。我想ADO的UPDATE不会不支持在于64KB。如果不支持为什么还提供大块操作命令。请高手指点。
      

  3.   

    存:
    Public Sub save_picture()
    Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset
      Dim bit() As Byte
      dim varPath as string '图片的路径    cnn.open "连接数据库的字符串"
        sSql = "SELECT * FROM 表 WHERE 关键字='" & 关键值 & "'"
                                 '选出要增加或修改图片记录的记录
        rst.Open sSql, cnn, adOpenKeyset, adLockOptimistic
        
        If Not (rst.EOF And rst.BOF) Then    
           If VarPath = "" Then
            '    然后将字节数组的内容写入数据库即可
                rst.Fields("INFO_PICT") = ""
                rst.UPDATE
           Else
                Open VarPath For Binary As #1
                ReDim bit(LOF(1)) As Byte
                Get 1, 1, bit
                Close 1
             '    然后将字节数组的内容写入数据库即可
                rst.Fields("INFO_PICT").AppendChunk bit
                rst.UPDATE
           End If
        End If
    end sub 取:
    Public Sub show_picture()
    Dim REC As Recordset
    Dim sSql As String
    Dim I As Integer
    Set REC = New Recordset
    Dim bit1() As Byte
    Dim sa As String
    sSql = "SELECT * FROM 表 WHERE 关键字 ='" & 关键值 & "'"
       REC.Open sSql, Conn, adOpenStatic, adLockOptimistic, adCmdText
         If REC.EOF Or REC.BOF Then
            Exit Sub
         Else
                Picture1.Picture = Nothing
                If REC("INFO_PICT").ActualSize > 0 Then
                    bit1 = REC.Fields("图片").GetChunk(REC("图片").ActualSize)
                    '然后将字节数组的内容拼装成文件即可
                    Open "c:\1.bmp" For Binary As #1
                  
                    Put 1, 1, bit1
                    Close 1
                    Picture1.Picture = LoadPicture("c:\1.bmp")  
                    kill ("c:\1.bmp")              End If
         End If
        rec.close
        Set REC = Nothing
    Exit Sub
    Err:
       MsgBox "读取图片出错!", OKOnly, "系统提示"
    End Sub
      

  4.   

    lincanwen  您好:
    你的程序我想不行,因为大于64KB字节,UPDATE就不执行。
      

  5.   

    谢谢。读取再合并时仍要用UPDATE,这时还是不行。大于64KB UPDATE 就不执行。
      

  6.   


    哎,舍不得呀,还是贴出来了...不一定好用,这是SQL SERVER的....
    没有文件大小限制.'***********************************************
    Dim Conn As New ADODB.Connection
    Dim FileName As String
    Const BLOCKSIZE = 4096
    Dim ADORst As New ADODB.Recordset 'ADODB Recordset
    Dim ADOFld As ADODB.FieldPrivate Sub Command1_Click()Save_Click  Dim arsfile As ADODB.Recordset
      Dim aa As ADODB.Record
         Dim n As Long
         Dim arrBytes() As Byte
         
     
     Set arsfile = New Recordset
     arsfile.Open "select * from A_file where id=2", Conn, adOpenStatic, adLockOptimisticn = arsfile.Fields("word").ActualSize
    ReDim arrBytes(1 To n) As Byte
    arrBytes = arsfile.Fields("word").GetChunk(n)    Open App.Path & "\test2.doc" For Binary As #1
         Put #1, , arrBytes
         Close #1End SubPrivate Sub Form_Load()
    Set Conn = New Connection
    Conn.CursorLocation = adUseClient
    Conn.Provider = "MSDataShape"
    Conn.Open "driver={sql server};server=10.0.0.1;uid=sa;pwd=;database=cmstest;"
    ADORst.Open "A_File", Conn, adOpenDynamic, adLockOptimistic
    'Set ADOFld.Recordset = ADORst '
    End Sub  Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)
      Dim byteData() As Byte
      Dim NumBlocks As Long 
      Dim FileLength As Long
      Dim LeftOver As Long 
      Dim SourceFile As Long
      Dim i As Long 
      SourceFile = FreeFile 
      Open App.Path & "\test.doc" For Binary Access Read As SourceFile  
      FileLength = LOF(SourceFile) 
      If FileLength = 0 Then 
      Close SourceFile
      MsgBox DiskFile
      Else
      NumBlocks = FileLength \ BLOCKSIZE 
      LeftOver = FileLength Mod BLOCKSIZE
      Fld.Value = Null
      ReDim byteData(BLOCKSIZE) 
      For i = 1 To NumBlocks
      Get SourceFile, , byteData() 
      Fld.AppendChunk byteData() 
      
      Next i
      ReDim byteData(LeftOver)
      Get SourceFile, , byteData() 
      Fld.AppendChunk byteData() 
      Close SourceFile 
      End If
      End Sub Private Sub Save_Click()
      ADORst.AddNew
      ADORst("id").Value = 2
      Set ADOFld = ADORst("word")
      Call SaveToDB(ADOFld, FileName)  ADORst.Update
     End Sub
      

  7.   

    ...
    reDim ChunkAry(Fragment - 1)
    Get filenumber, , ChunkAry()
    blobColumn.AppendChunk ChunkAry
    ReDim ChunkAry(ChunkSize - 1)
    For i = 1 To Chunks
        Get filenumber, , ChunkAry()     ’ 从文件中得到2048字节的内容
        blobColumn.AppendChunk ChunkAry     把得到的内容给A5 字段  
    Next
    ...
      这段程序我原来用过,我也说不太清楚为什么不行,原理上是可以,但是实际上图片一大确实存不进去(通过循环来存进数据库)。
      后来我就想办法进行一次行存进数据库,我在存进数据库前将图片数据存进数组,然后一次性往数据库中存放,下面的代码和你的有不同之处:
            ...    
                Open VarPath For Binary As #1   'varpath图片路径名
                ReDim bit(LOF(1)) As Byte
                Get 1, 1, bit
                Close 1
             '    然后将字节数组的内容写入数据库即可
                rst.Fields("INFO_PICT").AppendChunk bit
                rst.UPDATE
            .....
    原理上都一样,但实际效果不一样,你可以试一试。你那种方法我原来能存900k左右的图片,超过1M就不行,现在没有大小限制了。
      

  8.   

    lincanwen 你好:
      你的程序我试了,还是不行和我的程序出的问题一样
      

  9.   

    在高手的帮助下我提出的问题已经解决。别外还有一个部问题是:
    在ADO中 ursorLocation 的属性设置为 adUseClient的目是什么
    为什么不能设置为  adUseServer 
    下面这段内容我实在理解不了,请高手指点!!
    adUseClient 使用由本地游标库提供的客户端游标。本地游标引擎通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。adUseClientBatch 与 adUseClient 同义,也支持向后兼容性。 adUseServer 默认值。使用数据提供者或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。