Как OnCalcField без указания полей в редакторе полей TMSStoredProc?

Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
Закрыто
Dmitry Prom
Сообщения: 2
Зарегистрирован: Чт 01 авг 2013 13:16

Как OnCalcField без указания полей в редакторе полей TMSStoredProc?

Сообщение Dmitry Prom » Чт 01 авг 2013 13:25

Предмет:
У меня есть процедура, которой я передаю разные параметры и получаю разные рекордсеты.
Так же я собираюсь передавать в рекордсеты фиктивное поле, с которым хочу произвести некоторые OnCalcField операции (хотя это и не одно и тоже). Тем не менее.

Возможно ли запустить OnCalcField без указания даже одного поля в редакторе полей TMSStoredProc и как?

Благодарю.

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Как OnCalcField без указания полей в редакторе полей TMSStoredProc?

Сообщение AndreyZ » Пт 02 авг 2013 09:25

Событие OnCalcFields вызывается только при наличии вычисляемых полей. Для создания вычисляемых полей, Вам следует использовать редактор полей.

Dmitry Prom
Сообщения: 2
Зарегистрирован: Чт 01 авг 2013 13:16

Re: Как OnCalcField без указания полей в редакторе полей TMSStoredProc?

Сообщение Dmitry Prom » Пт 02 авг 2013 13:27

Только так и никак иначе не "триггернуть" это событие в компоненте?

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Как OnCalcField без указания полей в редакторе полей TMSStoredProc?

Сообщение AndreyZ » Пн 05 авг 2013 08:27

Вы можете создавать вычисляемые поля во время выполнения. Например:

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

procedure TMainForm.ButtonClick(Sender: TObject);
var
  i: integer;
  fd: TIntegerField;
begin
  MSStoredProc.StoredProcName := 'stored_proc_name';
  MSStoredProc.PrepareSQL;
  MSStoredProc.FieldDefs.Update;
  // создаем поля которые возвращаются с сервера
  for i := 0 to MSStoredProc.FieldDefs.Count - 1 do
    MSStoredProc.FieldDefs[i].CreateField(MSStoredProc);
  // добавляем новое вычисляемое поле
  fd := TIntegerField.Create(MSStoredProc);
  fd.FieldName := 'clc';
  fd.FieldKind := fkCalculated;
  fd.DataSet := MSStoredProc;
  MSStoredProc.Open;
end;

procedure TMainForm.MSStoredProcCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('clc').AsInteger := DataSet.FieldByName('fieldname').AsInteger * 2;
end;

Закрыто