Можно ли создать TStringField с динамическим размером?
Я имею Insufficient memory
ошибка с TClientDataset
с TStringField
поля. Мне нужно использовать длину строк от 0 до 8000 - но не знаю, какая длина будет, пока я не заполню TClientDataset
,
Итак, может TStringField
быть создан с динамическим Size
?
PS Первоначальная задача - скопировать TDBGrid в TClientDataset.
2 ответа
Я использовал следующее решение. Сначала вычислим максимум Sizes
основанный на Length(aDBGrid.Columns[i].Field.DisplayText)
, Затем создайте TStringFields
с рассчитанным Sizes
,
PS Первоначальная задача - скопировать TDBGrid в TClientDataset.
Какие данные вы храните в этих полях, чтобы они могли содержать до 8000 символов?
Представьте, что вы делаете частичный поиск по этим полям, используя подстановочные знаки. Могу поспорить, что такой поиск займет много времени и может даже привести к сбою сервера базы данных.
Кроме того, не все таблицы базы данных поддерживают StringFields размером 8192 символа.
http://docwiki.embarcadero.com/Libraries/XE6/en/Data.DB.TStringField
TStringField инкапсулирует фундаментальное поведение, общее для полей, которые содержат строковые данные. Значение строкового поля физически сохраняется как последовательность длиной до 8192 символов. Однако некоторые типы таблиц могут поддерживать только строковые поля меньших размеров.
Так почему бы вместо этого не использовать TMemoFields, поскольку они имеют динамический размер текста? http://docwiki.embarcadero.com/Libraries/XE6/en/Data.DB.TMemoField