Последняя версия DataExpress 3 beta от 11 декабря 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Дублирование записей из запроса.

Предложения по новому функционалу и развитию существующего.
cordek
Опытный
Сообщения: 263
Зарегистрирован: Вс май 14, 2017 2:53 pm

Re: Дублирование записей из запроса.

Сообщение cordek » Вс фев 11, 2018 9:17 am

Как можно скриптом получить список компонентов формы?

Аватара пользователя
admin
Разработчик
Сообщения: 3957
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Дублирование записей из запроса.

Сообщение admin » Вс фев 11, 2018 10:19 am

Достаточно обратиться к полям формы по их именам. Создайте два экземпляра формы. В одной делаете отбор одной записи (OpenRecord), в другой открываете OpenRecord(0) и добавляете новую запись и путем присваивания вида SrcFm['поле'] := DestFm['поле'] копируете.

cordek
Опытный
Сообщения: 263
Зарегистрирован: Вс май 14, 2017 2:53 pm

Re: Дублирование записей из запроса.

Сообщение cordek » Вс фев 11, 2018 11:49 am

admin писал(а):Достаточно обратиться к полям формы по их именам. Создайте два экземпляра формы. В одной делаете отбор одной записи (OpenRecord), в другой открываете OpenRecord(0) и добавляете новую запись и путем присваивания вида SrcFm['поле'] := DestFm['поле'] копируете.

Это мы знаем.
Хотелось бы на автомате получать список полей, а не прописывать по каждому полю заново в каждой форме.

jurist23rus
Эксперт
Сообщения: 2478
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Дублирование записей из запроса.

Сообщение jurist23rus » Вс фев 11, 2018 12:11 pm

Можно найти имена полей через коллекцию Components, перебрав её в цикле.

Код: Выделить всё

var
  FieldNamesOfForm: array of string;

function FindFieldName (Obj:TComponent): string;
var
  s:string;
begin
  s:=LowerCase(Obj.Classname);
  if s='tdxedit' then
    result:=tdxedit(Obj).Fieldname
  else if s='tdxcalcedit' then
    result:=tdxcalcedit(Obj).Fieldname
  else if s='tdxdateedit' then
    result:=tdxdateedit(Obj).Fieldname
  else if s='tdxtimeedit' then
    result:=tdxtimeedit(Obj).Fieldname
  else if s='tdxcombobox' then
    result:=tdxcombobox(Obj).Fieldname
  else if s='tdxlookupcombobox' then
    result:=tdxlookupcombobox(Obj).Fieldname
  else if s='tdxmemo' then
    result:=tdxmemo(Obj).Fieldname
  else if s='tdxcounter' then
    result:=tdxcounter(Obj).Fieldname
  else if s='tdxobjectfield' then
    result:=tdxobjectfield(Obj).Fieldname
  else if s='tdxfile'then
    result:=tdxfile(Obj).Fieldname
  else
    result:='';
end;


procedure FillMassiveOfFieldName (Self: TdxForm);
var
  i: integer;
  Fname: string;
begin
  for i:=0 to Self.ComponentCount-1 do
  begin
    Fname := FindFieldName (Self.Components[i]);
    if Fname = '' then continue;
    SetLength (FieldNamesOfForm, Length (FieldNamesOfForm)+1);
    FieldNamesOfForm[High(FieldNamesOfForm)] := AnsiLowerCase (FName);
  end;
end;


Если в цикле находится компонент у которого есть свойство Fieldname, то имя этого компонента записывается в массив FieldNamesOfForm. Эта процедура происходит один раз при запуске цикла. В дальнейшем программа уже работает с массивом, так как в нём уже хранится список всех полей формы.
Destiny is a very convenient word for those who never take decisions.

jurist23rus
Эксперт
Сообщения: 2478
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Дублирование записей из запроса.

Сообщение jurist23rus » Вс фев 11, 2018 4:56 pm

Destiny is a very convenient word for those who never take decisions.


Вернуться в «Предложения по развитию проекта.»