Re: TStringField.Size
Luca Olivetti via fpc-pascal <[email protected]>
| Newsgroups | gmane.comp.compilers.free-pascal.general |
|---|---|
| Message-ID | <[email protected]> |
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 - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal