次の方法で共有


Field.GetChunk メソッド (DAO)

適用先: Access 2013、Office 2013

Recordset オブジェクトの Fields コレクション内の Memo オブジェクトまたは Long BinaryField オブジェクトの内容のすべてまたは一部を返します。

構文

。GetChunk(Offset, Bytes)

Field オブジェクトを表す変数です。

パラメーター

名前

必須かどうか

データ型

説明

Offset

必須

Long

コピーを開始する前にスキップするバイト数。

バイト

必須

Long

取得するバイト数。

戻り値

バリアント型

注釈

GetChunk から返されたバイト数は変数に代入されます。 GetChunk を使用して、データの値全体の一部を 1 つずつ取得します。 分割された値を集めて元の値に戻すには、 AppendChunk メソッドを使用します。

offset が 0 の場合、 GetChunk はフィールドの最初のバイトからのコピーを開始します。

numbytes がフィールド内のバイト数を超える場合、 GetChunk はフィールド内の残りの実際のバイト数を返します。

注:

[!メモ] 文字列の場合はメモ型 ( Memo) のフィールドを使用し、ロング バイナリ型 ( Long Binary) のフィールドにはバイナリ データのみ格納してください。 この逆を行うと、予期しない結果を招きます。

次の使用例では、 AppendChunk メソッドと GetChunk メソッドを使用して、別のレコードからのデータを一度に 32K ずつ読み込んで OLE オブジェクトのフィールドに設定します。 実際のアプリケーションでは、たとえば、社員レコード (社員の写真を含む) をあるテーブルから別のテーブルにコピーするときに、このようなプロシージャを使用します。 この使用例では、単にレコードを同じテーブルにコピーしています。 すべてのブロック操作は、1 つの AddNew-Update シーケンス内で行われています。

    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