[fpc-pascal] TStringField.Size
Michael Van Canneyt
michael at freepascal.org
Tue Jul 15 18:01:14 CEST 2025
On Mon, 14 Jul 2025, Luca Olivetti via fpc-pascal wrote:
> El 14/7/25 a les 17:57, Michael Van Canneyt via fpc-pascal ha escrit:
>>
>>
>> On Mon, 14 Jul 2025, Luca Olivetti via fpc-pascal wrote:
>>
>>> El 14/7/25 a les 14:59, Michael Van Canneyt via fpc-pascal ha escrit:
>>>
>>>>>
>>>>> That's not what the documentation says
>>>>>
>>>>> https://www.freepascal.org/docs-html/fcl/db/tstringfield.size.html
>>>>> (emphasis mine)
>>>>>
>>>>> "it is the declared *maximum* size of the string (in *characters*) and
>>>>> is used to calculate the size of the dataset buffer."
>>>>
>>>> Seems the documentation has not been updated for the unicode case :-(
>>>
>>> Well, even the "maximum" part isn't true, at least using the
>>> TMSSQLConnection.
>>
>> How so ? the size comes from what is reported by MSSQL.
>
> Well, in both cases (using TMSSQLConnection and TPQConnection) I have
> specified the size of the TStringField in the object inspector.
> When using the TMSSQLConnection the size I specified seems to be ignored
> (i.e. I have set it to 100, the field has been changed to varchar(200) and I
> get more than 100 characters) while with TPQConnection the length is
> truncated (i.e. even if I change the field to varchar(200) any record with a
> value longer than 100 characters is truncated to 100 characters).
> Again, the documentation says "Size is made published by the TStringField
> class so it can be set in the IDE" and I expected that to be the case, which
> it true with TPQConnection but false with TMSSQLConnection.
Under normal circumstances, it makes little or no sense to change the size.
The size is the size of the internal buffer reserved for the data of the
field. This will truncate anything you try to save in it to that size.
The only connection to the declared field size in the database is that
the 'size' property of the field is initially set to a size large enough
to contain the maximum amount of characters in the database field.
The only reason that you can change it in the object inspector is that
when the database field size changes, you can adjust the buffer size without
needing to reinitialize all persistent fields.
Michael.
More information about the fpc-pascal
mailing list