Заводишь массив типа
Код:
type
TMyContols = record
ALabel : TLabel;
AEdit : TEdit;
end;
var
AMyControls = array of TMyControls;
Это динамический массив.
Далее после открытия таблицы делаешь такую штуку:
Код:
var
I : Integer;
begin
For I := 0 To ADOQuesr1.Fields.Count-1 Do
Begin
setLength(AMyControls,Length(AMyControls)+1); // Добавляем 1 элемент
AMyControls[High(AMyControls)].ALabel := TLabel.Create(Self);
AMyControls[High(AMyControls)].ALabel.Parent := Self;
AMyControls[High(AMyControls)].ALabel.Top := 10 * I;
AMyControls[High(AMyControls)].ALabel.Left := 100;
AMyControls[High(AMyControls)].ALabel.Caption := ADOQuesr1.Fields[i].FieldName;
AMyControls[High(AMyControls)].AEdit := TEdit.Create(Self);
AMyControls[High(AMyControls)].AEdit.Parent := Self;
AMyControls[High(AMyControls)].AEdit.Top := I * 10;
AMyControls[High(AMyControls)].AEdit.Left := 300;
AMyControls[High(AMyControls)].AEdit.OnChange := EditChangeEvent;
End;
end;
EventChangeEvent - обработчик изменения контрола.
Как собирать данные - циклом по массиву - из метки берешь имя поля, из эдита - данные.
Очистка массива - сначала удалить сами контролы, потом поставить массиву длинну 0.
ЗЫ. Я бы делал запуск запроса не по изменению значения в эдите, а по кнопке, т.к. выборки могут быть большие и ты учухаешься ждать, пока после нажатия любой клавиши у тебя выполнится новый зпрос.