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

Reply via email to