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

Тема в разделе "Delphi - Базы данных", создана пользователем FixeR, 13 фев 2012.

  1. FixeR

    FixeR Гость

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

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

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

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

    2)
    Код (Text):
    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.

    Подскажите, что я делаю не так?
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    А что не понятно в ошибке?
     
  3. FixeR

    FixeR Гость

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

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

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Она говорит что нет поля в таблице базы, а не в ClientDataSet1.
     
  5. FixeR

    FixeR Гость

    Можно поподробнее? "таблица базы" - это что имеется ввиду?
     
  6. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Ну ... собственно, там откуда у вас данные идут. Вы же их откудато грузите в этот самый ClientDataSet1? так вот там его и нет.
     
  7. FixeR

    FixeR Гость

    Нет. Датасет сам по себе, не связан с ДБ. Всё вручную заполняется.

    Прмерно так:
    Код (Text):
    ClientDataSet1.Fields[0].Value := 'тест 1';
    ClientDataSet1.Fields[1].Value := 'тест 2';
    ClientDataSet1.Fields[2].Value := 'тест 3';
    Схема обычная: Grid1 < DataSource1 < ClientDataSet1

    Сообщение об ошибке вот такое:
    ClientDataSet1: Field 'new' not found
     
  8. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Ерунда какая-то.
     
  9. FixeR

    FixeR Гость

  10. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Все можно, только работать с ним надо так как и предписано, а так как вы эот делаете, это неправильно.
     
Загрузка...

Поделиться этой страницей