Freigeben über


Field2.FieldSize-Eigenschaft (DAO)

Gilt für: Access 2013, Office 2013

Returns the number of bytes used in the database (rather than in memory) of a Memo or Long Binary Field2 object in the Fields collection of a Recordset object.

Syntax

Ausdruck . Feldgröße

Ausdruck Eine Variable, die ein Field2-Objekt darstellt.

Hinweise

Sie können die FieldSize-Eigenschaft mit den Methoden AppendChunk und GetChunk zum Bearbeiten großer Felder verwenden.

Because the size of a Long Binary or Memo field can exceed 64K, you should assign the value returned by FieldSize to a variable large enough to store a Long variable.

To determine the size of a Field2 object other than Memo and Long Binary types, use the Size property.

  • Der Datenbankserver oder ODBC-Treiber unterstützt keine serverseitigen Cursor.

  • Sie verwenden die ODBC-Cursorbibliothek (d. h. die DefaultCursorDriver-Eigenschaft ist auf dbUseODBC festgelegt oder auf dbUseDefault, wenn der Server keine serverseitigen Cursor unterstützt).

  • Sie verwenden eine Abfrage ohne Cursor (d. h. die DefaultCursorDriver-Eigenschaft ist auf dbUseNoCursor festgelegt).

Die FieldSize-Eigenschaft und die VBA-Funktionen Len() oder LenB() geben möglicherweise unterschiedliche Werte als die Länge derselben Zeichenfolge zurück. Zeichenfolgen werden in einer Microsoft Access-Datenbank in MBCS-Form (Multibyte-Zeichensatz) gespeichert, aber über VBA im Unicode-Format verfügbar gemacht. Daher gibt die Len()- Funktion immer die Anzahl der Zeichen zurück, LenB gibt immer die Anzahl der Zeichen X 2 zurück (Unicode verwendet zwei Bytes für jedes Zeichen), aber FieldSize gibt einen Wert dazwischen zurück, wenn die Zeichenfolge MBCS-Zeichen enthält. Wenn beispielsweise eine Zeichenfolge aus drei Normalzeichen und zwei MBCS-Zeichen besteht, gibt Len() 5, LenB() 10 zurück, und FieldSize gibt 7 zurück, die Summe von 1 für jedes normale Zeichen und 2 für jedes MBCS-Zeichen.

Beispiel

This example uses the FieldSize property to list the number of bytes used by the Memo and Long Binary Field objects in two different tables.

    Sub FieldSizeX() 
     
     Dim dbsNorthwind As Database 
     Dim rstCategories As Recordset 
     Dim rstEmployees As Recordset 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set rstCategories = _ 
     dbsNorthwind.OpenRecordset("Categories", _ 
     dbOpenDynaset) 
     Set rstEmployees = _ 
     dbsNorthwind.OpenRecordset("Employees", _ 
     dbOpenDynaset) 
     
     Debug.Print _ 
     "Field sizes from records in Categories table" 
     
     With rstCategories 
     Debug.Print " CategoryName - " & _ 
     "Description (bytes) - Picture (bytes)" 
     
     ' Enumerate the Categories Recordset and print the size 
     ' in bytes of the picture field for each record. 
     Do While Not .EOF 
     Debug.Print " " & !CategoryName & " - " & _ 
     !Description.FieldSize & " - " & _ 
     !Picture.FieldSize 
     .MoveNext 
     Loop 
     
     .Close 
     End With 
     
     Debug.Print "Field sizes from records in Employees table" 
     
     With rstEmployees 
     Debug.Print " LastName - Notes (bytes) - " & _ 
     "Photo (bytes)" 
     
     ' Enumerate the Employees Recordset and print the size 
     ' in bytes of the picture field for each record. 
     Do While Not .EOF 
     Debug.Print " " & !LastName & " - " & _ 
     !Notes.FieldSize & " - " & !Photo.FieldSize 
     .MoveNext 
     Loop 
     
     .Close 
     End With 
     
     dbsNorthwind.Close 
     
    End Sub 

In diesem Beispiel werden die Methoden AppendChunk und GetChunk verwendet, um ein OLE-Objektfeld mit Daten aus einem anderen Datensatz zu füllen (immer jeweils 32 KB). In einer echten Anwendung kann es sinnvoll sein, mit einer Prozedur wie dieser einen Mitarbeiterdatensatz (inklusive Foto des Mitarbeiters) von einer Tabelle in eine andere zu kopieren. In diesem Beispiel wird der Datensatz einfach wieder in dieselbe Tabelle kopiert. Beachten Sie, dass die gesamte Bearbeitung des Abschnitts innerhalb einer einzelnen AddNew-Aktualisierungssequenz erfolgt.

    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 Field2, _ 
     fldDestination As Field2) 
     
     ' 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