[fpc-pascal] TStringField.Size
Luca Olivetti
luca at ventoso.org
Tue Jul 15 18:20:53 CEST 2025
El 15/7/25 a les 18:01, 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 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.
I'm probably very bad at explaining myself: the size was automatically
set when I double clicked on the (opened) query component and added the
fields. Then somebody else doubled the size of the underlying field in
the database...
>
> 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.
...and the data *wasn't* truncated to the specified size when reading
the data using a TMSSQLConnection, so, curious, I tried the same with
postgresql and it does truncate the data.
>
> 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.
I don't even know how to do that :-D in any case what I see is that a
TMSSQLConnection doesn't seem to respect the size set in the object
inspector while a TPQConnection does and I find that inconsistent.
Bye
--
Luca
More information about the fpc-pascal
mailing list