• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

FixeR

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

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

Делаю примерно вот так:
Код:
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;
В результате добавляется строка, но пустая.
 
F

FixeR

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

Рабочий код:
Код:
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);
 
D

DrFaust01

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

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;
 
Мы в соцсетях:

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