• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Добавить Field К Заполненному Clientdataset

  • Автор темы FixeR
  • Дата начала
F

FixeR

Захотелось в рантайме добавлять поле в ClientDataSet (конкретнее - это MemTableEh из EhLib).

Датасет связан с гридом, имеется 3 поля и несколько записей в таблице.

После многих вариантов пришел к следующему:

1)
Код:
ClientDataSet1.FieldDefs.Add('new', ftString, 20, false);
ClientDataSet1.CreateDataSet;
Поле создаётся, однако все записи из таблицы пропадают.

2)
Код:
ClientDataSet1.Close;
ClientDataSet1.FieldDefs.Add('new', ftString, 20, false);

for i := 0 to ClientDataSet1.FieldDefs.Count - 1 do
ClientDataSet1.FieldDefs[i].CreateField(ClientDataSet1);

ClientDataSet1.Open;
Последняя строчка вызывает ошибку Field 'new' not found.

Подскажите, что я делаю не так?
 
F

FixeR

А что не понятно в ошибке?
Пишет Field 'new' not found, хотя количество полей (ClientDataSet1.Fields.Count) увеличивается, значит, поле создается.

Мне всего-то нужно добавить столбик к имеющейся таблице (grid) без потери данных.
Неужели это никак нельзя сделать?
 
M

-master-

Она говорит что нет поля в таблице базы, а не в ClientDataSet1.
 
M

-master-

Ну ... собственно, там откуда у вас данные идут. Вы же их откудато грузите в этот самый ClientDataSet1? так вот там его и нет.
 
F

FixeR

Вы же их откудато грузите в этот самый ClientDataSet1?
Нет. Датасет сам по себе, не связан с ДБ. Всё вручную заполняется.

Прмерно так:
Код:
ClientDataSet1.Fields[0].Value := 'тест 1';
ClientDataSet1.Fields[1].Value := 'тест 2';
ClientDataSet1.Fields[2].Value := 'тест 3';

Схема обычная: Grid1 < DataSource1 < ClientDataSet1

Сообщение об ошибке вот такое:
ClientDataSet1: Field 'new' not found
 
M

-master-

Все можно, только работать с ним надо так как и предписано, а так как вы эот делаете, это неправильно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!