Можно ли создать 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

Другие вопросы по тегам