Страница 1 из 1

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

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

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

Благодарю.

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

Добавлено: Пт 02 авг 2013 09:25
AndreyZ
Событие OnCalcFields вызывается только при наличии вычисляемых полей. Для создания вычисляемых полей, Вам следует использовать редактор полей.

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

Добавлено: Пт 02 авг 2013 13:27
Dmitry Prom
Только так и никак иначе не "триггернуть" это событие в компоненте?

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

Добавлено: Пн 05 авг 2013 08:27
AndreyZ
Вы можете создавать вычисляемые поля во время выполнения. Например:

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

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;