AppendChunk 和 GetChunk 方法范例

该范例使用 AppendChunk 和 GetChunk 方法用其他记录中的数据填写图像字段。

Public Sub AppendChunkX()

   Dim cnn1 As ADODB.Connection

   Dim rstPubInfo As ADODB.Recordset

   Dim strCnn As String

   Dim strPubID As String

   Dim strPRInfo As String

   Dim lngOffset As Long

   Dim lngLogoSize As Long

   Dim varLogo As Variant

   Dim varChunk As Variant

   Const conChunkSize = 100

   ' 打开连接。

   Set cnn1 = New ADODB.Connection

      strCnn = "Provider=sqloledb;" & _

      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "

   cnn1.Open strCnn

   ' 打开 pub_info 表。

   Set rstPubInfo = New ADODB.Recordset

   rstPubInfo.CursorType = adOpenKeyset

   rstPubInfo.LockType = adLockOptimistic

   rstPubInfo.Open "pub_info", cnn1, , , adCmdTable

   ' 提示复制徽标。

   strMsg = "Available logos are : " & vbCr & vbCr

   Do While Not rstPubInfo.EOF

      strMsg = strMsg & rstPubInfo!pub_id & vbCr & _

         Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _

         vbCr & vbCr

      rstPubInfo.MoveNext

   Loop

   strMsg = strMsg & "Enter the ID of a logo to copy:"

   strPubID = InputBox(strMsg)

   ' 将徽标大块复制到变量中。

   rstPubInfo.Filter = "pub_id = '" & strPubID & "'"

   lngLogoSize = rstPubInfo!logo.ActualSize

   Do While lngOffset < lngLogoSize

      varChunk = rstPubInfo!logo.GetChunk(conChunkSize)

      varLogo = varLogo & varChunk

      lngOffset = lngOffset + conChunkSize

   Loop

   ' 从用户处得到数据。

   strPubID = Trim(InputBox("Enter a new pub ID:"))

   strPRInfo = Trim(InputBox("Enter descriptive text:"))

   ' 添加新记录,大块复制徽标。

   rstPubInfo.AddNew

   rstPubInfo!pub_id = strPubID

   rstPubInfo!pr_info = strPRInfo

   lngOffset = 0 ' 重置位移。

   Do While lngOffset < lngLogoSize

      varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _

         conChunkSize)

      rstPubInfo!logo.AppendChunk varChunk

      lngOffset = lngOffset + conChunkSize

   Loop

   rstPubInfo.Update

    ' 显示新添加的数据。

   MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _

      "Description: " & rstPubInfo!pr_info & vbCr & _

      "Logo size: " & rstPubInfo!logo.ActualSize

   ' 删除新记录,因为这只是演示。

   rstPubInfo.Requery

   cnn1.Execute "DELETE FROM pub_info " & _

      "WHERE pub_id = '" & strPubID & "'"

   rstPubInfo.Close

   cnn1.Close

End Sub