AppendChunk Method
Applies To
Field object.
Description
Appends data from a string expression to a Memo or Long Binary Field object in a Recordset.
Syntax
recordset! field.AppendChunk source
The AppendChunk method syntax has these parts.
Part | Description |
|
recordset | An object variable that represents the Recordset object containing the Fields collection. |
field | An object variable that represents the name of a Field object whose Type property is set to dbMemo (Memo), dbLongBinary (Long Binary), or the equivalent. |
source | A Variant (String subtype) expression or variable containing the data you want to append to the Field object specified by field. |
Remarks
You can use the AppendChunk and GetChunk methods to access subsets of data in a Memo or Long Binary field.
You can also use these methods to conserve string space when you work with Memo and Long Binary fields. Certain operations (copying, for example) involve temporary strings. If string space is limited, you may need to work with chunks of a field instead of the entire field.
If there is no current record when you use AppendChunk, an error occurs.
Notes
- The initial AppendChunk operation (after an Edit or AddNew call) will simply place the data in the field, overwriting any existing data. Subsequent AppendChunk calls within the same Edit or AddNew session will then add to the existing data.
- In an ODBCDirect workspace, unless you first edit another field in the current record, using AppendChunk will fail (though no error occurs) while you are in Edit mode.
- In an ODBCDirect workspace, after you use AppendChunk on a field, you cannot read or write that field in an assignment statement until you move off the current record and then return to it. You can do this by using the MoveNext and MovePrevious methods.
See Also
AddNew method, Edit method, FieldSize property, GetChunk method, Type property.
Example
This example uses the AppendChunk and GetChunk methods to fill an OLE object field with data from another record, 32K at a time. In a real application, one might use a procedure like this to copy an employee record (including the employee's photo) from one table to another. In this example, the record is simply being copied back to same table. Note that all the chunk manipulation takes place within a single AddNew-Update sequence.
Sub AppendChunkX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim rstEmployees2 As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' Open two recordsets from the Employees table.
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset)
Set rstEmployees2 = rstEmployees.Clone
' Add a new record to the first Recordset and copy the
' data from a record in the second Recordset.
With rstEmployees
.AddNew
!FirstName = rstEmployees2!FirstName
!LastName = rstEmployees2!LastName
CopyLargeField rstEmployees2!Photo, !Photo
.Update
' Delete new record because this is a demonstration.
.Bookmark = .LastModified
.Delete
.Close
End With
rstEmployees2.Close
dbsNorthwind.Close
End Sub
Function CopyLargeField(fldSource As Field, _
fldDestination As Field)
' Set size of chunk in bytes.
Const conChunkSize = 32768
Dim lngOffset As Long
Dim lngTotalSize As Long
Dim strChunk As String
' Copy the photo from one Recordset to the other in 32K
' chunks until the entire field is copied.
lngTotalSize = fldSource.FieldSize
Do While lngOffset < lngTotalSize
strChunk = fldSource.GetChunk(lngOffset, conChunkSize)
fldDestination.AppendChunk strChunk
lngOffset = lngOffset + conChunkSize
Loop
End Function
Example (Microsoft Access)
The following example appends data to the Notes field for each record in an Employees table. The data type of the Notes field is Memo. The procedure returns the contents of the field by using the GetChunk method, adds to the data, and appends the altered data back to the Notes field by using the AppendChunk method.
Sub AddToMemo()
Dim dbs As Database, rst As Recordset
Dim fldNotes As Field, fldFirstName As Field
Dim fldLastName As Field
Dim lngSize As Long, strChunk As String
' Return reference to current database.
Set dbs = CurrentDb
' Create table-type Recordset object.
Set rst = dbs.OpenRecordset("Employees")
' Return references to Field objects.
Set fldNotes = rst!Notes
Set fldFirstName = rst!FirstName
Set fldLastName = rst!LastName
' Loop through all records in recordset.
Do Until rst.EOF
' Check if data exists in Notes field.
If IsNull(fldNotes.Value) Then
' If no data, use AppendChunk method only.
strChunk = fldFirstName _
& " " & fldLastName & " is an excellent employee."
With rst
.Edit
!Notes = strChunk
.Update
.MoveNext
End With
Else
lngSize = Len(fldNotes)
' Use GetChunk to retrieve existing data.
strChunk = fldNotes.GetChunk(0, lngSize)
' Alter data.
strChunk = strChunk & " " & fldFirstName _
& " " & fldLastName & " is an excellent employee."
With rst
.Edit ' Enable editing.
!Notes = "" ' Initialize field.
!Notes.AppendChunk strChunk ' Append altered data.
.Update ' Save changes.
.MoveNext ' Move to next record.
End With
End If
Loop
rst.Close
Set dbs = Nothing
End Sub