Что такое TFDDatSRow? - PullRequest
       34

Что такое TFDDatSRow?

3 голосов
/ 11 мая 2019

Я использую Delphi 10.3. Я пытаюсь создать базу данных памяти, добавить в нее данные и найти в ней данные.

Я написал следующий код, ссылающийся на чужой, и он хорошо работает.

procedure TForm1.DataAppendFind;
var
  _FieldDef: TFieldDef;
  _FDDatsRow: TFDDatSRow;
  i: Integer;
begin
  _FieldDef := FDMemTable1.FieldDefs.AddFieldDef;

  _FieldDef.Name := 'field1';
  _FieldDef.DataType := ftInteger;

  _FieldDef := FDMemTable1.FieldDefs.AddFieldDef;

  _FieldDef.Name :='field2';
  _FieldDef.DataType := ftString;
  _FieldDef.Size := 10;

  FDMemTable1.CreateDataSet;

  FDMemTable1.Append;

  FDMemTable1.FieldValues['field1'] := 1;
  FDMemTable1.FieldValues['field2'] := 'one';

  FDMemTable1.Append;

  FDMemTable1.FieldValues['field1'] := 2;
  FDMemTable1.FieldValues['field2'] := 'two';

  FDMemTable1.First;

  for i := 0 to FDMemTable1.RecordCount - 1 do
  begin
    _FDDatsRow := FDMemTable1.GetRow;

    if _FDDatsRow.Values['field1'] = 2 then
    begin
      Caption := _FDDatsRow.ValueS['field2'];
    end;

    FDMemTable1.Next;
  end;
end;

Я не могу понять TFDDatSRow, что я пытался найти его по ссылкам Delphi и Google для него. Но нет четкого документа об этом. Я могу предположить, что это похоже на строку, но не на строку, потому что у нее длинное и сложное имя, а не просто tROW.

Что такое TFDDatSRow, почему нет ссылки на него и где я могу получить соответствующую информацию об этом? И, наконец, правильный ли код выше?

1 Ответ

3 голосов
/ 11 мая 2019

Да, ваш код работает правильно.Признаюсь, я не сталкивался с TFDDatSRow до вашего q, но, посмотрев на него, вполне очевидно, для чего он нужен.

Все компоненты набора данных FireDAC происходят от TDataSet и поэтому соответствуют его способу моделирования операций с набором данных., то есть, когда набор данных открыт, он имеет логический курсор, который находится «над» ровно на одной записи в наборе данных, и это та запись, «активная», с точки зрения Delphi, с такими операциями, как Edit, Post, FieldByName и т. Д.Это работает нормально, но делает некоторые операции невозможными, например, одновременную работу с двумя записями, например, когда вы хотите обмениваться значениями между двумя разными записями, потому что они не могут одновременно быть активной записью набора данных.

Я сказал, что совершенно очевидно, для чего предназначен TFDDatSRow, и одно: разрешить именно такой параллельный доступ к двум или более записям.

Например, этот код

  FDMemTable1.First;
  FDDatsRow1 := FDMemTable1.GetRow;
  FDMemTable1.Next;
  FDDatsRow2 := FDMemTable1.GetRow;

  FDDatSRow1.BeginEdit;
  FDDatSRow1.Values['Field2'] := FDDatSRow2.Values['Field2'];
  FDDatSRow1.EndEdit(False);

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

Почему это не задокументировано?Не знаю, спросите EMBA.

Как я узнал о его методах?Проще говоря, я объявил переменную

 var FDDatSRow1 : TFDDatSRow;

, а затем набрал

  FDDatSRow1.

, и код завершения среды IDE выскочил.

Также, выбрав TFDDatSRow и выполнивCtrl-Click возвращает меня к объявлению в модуле FireDac.DatS.Заглядывая туда, автор FireDAC, очевидно, имеет в виду гораздо больше, чем показано в моем примере.

...