Тема: Поиск
Показать сообщение отдельно
  #2  
Старый 14.01.2009, 18:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Заводишь массив типа

Код:
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.

ЗЫ. Я бы делал запуск запроса не по изменению значения в эдите, а по кнопке, т.к. выборки могут быть большие и ты учухаешься ждать, пока после нажатия любой клавиши у тебя выполнится новый зпрос.
Ответить с цитированием