Динамическое создание таблицы Memtableeh

Тема в разделе "Delphi - Компоненты", создана пользователем FixeR, 23 июл 2011.

  1. FixeR

    FixeR Гость

    Есть DbGridEh, соединённый с MemTableEh (через DataSource).
    Нужно динамически создать описания полей (FieldDefs) и сразу же их заполнить.

    Документации кот наплакал... Не получается ;)

    Делаю примерно вот так:
    Код (Delphi):
    Form1.MemTableEh1.FieldDefs.Clear;
    Form1.MemTableEh1.FieldDefs.Add('FieldName', ftString, 30, false);
    Form1.MemTableEh1.CreateDataSet;
    Form1.MemTableEh1.Active := true;

    Form1.MemTableEh1.Append;
    Form1.MemTableEh1.FieldByName('FieldName').AsString := 'test';
    Form1.MemTableEh1.Post;

    Form1.MemTableEh1.Open;
    Form1.MemTableEh1.Refresh;
    В результате добавляется строка, но пустая.
     
  2. FixeR

    FixeR Гость

    Не хватало DBGridEh1.Columns.AddAllColumns(true);

    Рабочий код:
    Код (Delphi):
    MemTableEh1.FieldDefs.Clear;

    MemTableEh1.FieldDefs.Add('Field1', ftString, 30, false);
    MemTableEh1.FieldDefs.Add('Field2', ftString, 30, false);

    MemTableEh1.CreateDataSet;

    MemTableEh1.First;

    MemTableEh1.Edit;
    MemTableEh1.FieldByName('Field1').Value := '1';
    MemTableEh1.FieldByName('Field2').Value := '2';
    MemTableEh1.Post;

    DBGridEh1.Columns.AddAllColumns(true);
     
  3. DrFaust01

    DrFaust01 Гость

    Подскажите пожалуйста, а как можно создать подобным способом lookup поле? У FieldDefs подобного свойства не нашел, а Fields не дает редактировать - ругается что либо не находит полей либо датасет уже открыт.
     
  4. perceptron

    perceptron Гость

    MemTableEh1.FieldDefs.Update;
    MemTableEh1.FieldDefs[0].CreateField(DataSet);
    MemTableEh1.FieldDefs[1].CreateField(DataSet);
    NameField := TStringField.Create(DataSet);
    With NameField Do
    Begin
    FieldName := 'myName';
    Size := MyQuery.FieldByName('Name').Size;
    KeyFields := 'KeyFieldName';
    LookupDataSet := MyQuery;
    LookupCache := True;
    LookupKeyFields := 'Code';
    LookupResultField := 'myName';
    Lookup := True;
    end;
    NameField.DataSet := MemTableEh1;
     
Загрузка...

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