Автоматическое открытие Detail DataSet`ов

Обсуждение возникших проблем, предложений и ошибок IBDAC компонентов
Закрыто
SyntaX_Err0r
Сообщения: 4
Зарегистрирован: Вт 27 сен 2011 06:31

Автоматическое открытие Detail DataSet`ов

Сообщение SyntaX_Err0r » Ср 12 окт 2011 08:45

Здравствуйте. Подскажите пожалуйста, есть ли возможность выставить в опциях детализируюещему датасету, открываться когда происходит открытие "мастера"? Что-то я такого не нашел. Либо указать в IBConnection закрыться всем запросам. Вроде IBConn.CloseAllDataSet.
Спасибо.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Сообщение Alexp » Ср 12 окт 2011 13:00

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

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

function CloseAllDataSet(Connection: TCustomDAConnection): integer;
var
  i: integer;
begin
  result:= 0;
  try
    for i := 0 to Connection.DataSetCount - 1 do
      if (Connection.DataSets[i] is TCustomDADataSet) and Connection.DataSets[i].Active then
      begin
        Connection.DataSets[i].Close;
        inc(result);
      end;
  except
    Result:= -1;
  end;
end;


function OpenDetailDataSet(
  MasterDataSet: TCustomDADataSet): integer;
var
  i: integer;
begin
  result:= 0;
  try
    for i := 0 to MasterDataSet.Connection.DataSetCount - 1 do
    begin
      if Assigned(TCustomDADataSet(MasterDataSet.Connection.DataSets[i]).MasterSource) and
        Assigned(TCustomDADataSet(MasterDataSet.Connection.DataSets[i]).MasterSource.DataSet) and
        (TCustomDADataSet(MasterDataSet.Connection.DataSets[i]).MasterSource.DataSet = MasterDataSet) and 
        (not MasterDataSet.Connection.DataSets[i].Active) then
        begin
         MasterDataSet.Connection.DataSets[i].Open;
          inc(result);
        end;
    end;
  except
    result := -1;
  end;
end;
Кроме того вы можете создать наследника от TDataSource и перекрыв его методы добиться аналогичного поведения

SyntaX_Err0r
Сообщения: 4
Зарегистрирован: Вт 27 сен 2011 06:31

Сообщение SyntaX_Err0r » Ср 12 окт 2011 14:08

Спасибо за вразумительный ответ.

Закрыто