Да, ваш код работает правильно.Признаюсь, я не сталкивался с 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, очевидно, имеет в виду гораздо больше, чем показано в моем примере.