如何往一个SQL2000的数据库,写入一个长度为384字节的二进制数据呀
我试了用AppendChunk和GetChunk
但VB提示这两个属性根本不可用呀
用AddNew方法直接写入后,再直接读出的数据和原来的数据又完全不同到底是怎么回事呀

解决方案 »

  1.   

    '模块:
    Public Function DatabaseToFile(ByVal DataField As ADODB.Field, ByVal vSaveAs As String, ByVal vFileExpendName As String) As String
    Dim fnum As Long, bytesleft As Long, bytes As Long
    Dim lSumSize As Long, lNowSize As Long
    Dim tmp() As Byte
        On Error GoTo ErrHandleDatabaseToFile
        If Trim(vSaveAs) = "" Then
           ' DatabaseToFile = GetTempFileName(vFileExpendName)
        Else
            DatabaseToFile = Trim(vSaveAs)
        End If
        
        fnum = FreeFile
        Open (DatabaseToFile) For Binary As fnum
        bytesleft = DataField.ActualSize
        
        lSumSize = CLng(bytesleft / 8192)
        
        Do While bytesleft
            bytes = bytesleft
            If bytes > 8192 Then bytes = 8192
            tmp = DataField.GetChunk(bytes)
            Put #fnum, , tmp
            bytesleft = bytesleft - bytes
            lNowSize = lNowSize + 1    Loop
        Close #fnum
        Exit Function
    ErrHandleDatabaseToFile:
        DatabaseToFile = ""
        Err.Clear
    End FunctionPublic Function FileToDatabase(ByVal vDataField As ADODB.Field, ByVal vFileName As String)
    Dim fnum As Long, bytesleft As Long, bytes As Long
    Dim lSumSize As Long, lNowSize As Long
    Dim tmp() As Byte
        On Error GoTo ErrHandleFileToDatabase
        
        fnum = FreeFile
        Open vFileName For Binary As fnum
        bytesleft = LOF(fnum)
        lSumSize = CLng(bytesleft / 8192)
        Do While bytesleft
            bytes = bytesleft
            If bytes > 8192 Then bytes = 8192
            ReDim tmp(1 To bytes) As Byte
            Get #fnum, , tmp
            vDataField.AppendChunk tmp
            bytesleft = bytesleft - bytes
            lNowSize = lNowSize + 1
            DoEvents
           ' RaiseEvent TransmitData(lNowSize, lSumSize, True)
           Debug.Print vDataField.ActualSize
        Loop
            Close #fnum
        
        Exit Function
    ErrHandleFileToDatabase:
        Err.Clear
    End Function'窗体:
    Public CN As ADODB.Connection
    Public AtRs As ADODB.Recordset
    Public StrCn As StringPrivate Sub Form_Load()
    StrCn = "driver={SQL server};server=lbzks;database=lb;User ID=app_user;Password=user888;"
    Set CN = New ADODB.Connection
    CN.CommandTimeout = 30
    CN.Open StrCn
    Set AtRs = New ADODB.Recordset
    Set AtRs.ActiveConnection = CN
    AtRs.CursorType = adOpenKeyset
    AtRs.LockType = adLockBatchOptimistic
    End SubPrivate Sub Command1_Click()
        If AtRs.State = adStateOpen Then AtRs.Close
        With AtRs
            .Open "select * from SYSTEMP_UP_WJ", StrCn, 1, 3
            .AddNew         '新增一条记录,必须
            FileToDatabase AtRs!up_wj, App.Path + "\原始.jpg"
            .Update
        End With
    End SubPrivate Sub Command2_Click() '导出
         Sql = "select * FROM SYSTEMP_UP_WJ"
         If AtRs.State = adStateOpen Then AtRs.Close
         AtRs.Open Sql, CN, , , adCmdText
         If AtRs.RecordCount > 0 Then
           DatabaseToFile AtRs!up_wj, App.Path + "\导出.jpg", ""
         End If
    End Sub
      

  2.   

    而且
    "我试了用AppendChunk和GetChunk
    但VB提示这两个属性根本不可用呀"就是这语句
     vDataField.AppendChunk tmp提示"实时错误3219
         该操作在内容不被允许"
      

  3.   

    我晕呀
    怎么把字段改成Image就可以写入了
    但我要存的并不是Image呀
    是一个二进制数组变量来的