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
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal