Можете ли вы использовать только выбранный в данный момент элемент в Memtable?
Краткий ответ - "Да", как решительно объяснил @KenWhite.
Причинаответ «Да» объясняется тем, как TDataSet и его потомки, такие как TKbmMemtable, работают.
Возможно, вы знаете, что определенное поведение TDataSet и др. состоит в том, что он моделирует внутренний «курсор», который точно указываетодна запись в наборе данных, и эта запись обрабатывается TDataSet и всеми элементами управления с поддержкой db как «активная» запись: вы перемещаетесь по набору данных, перемещая логический курсор такими методами, как First
, Last
, Next
, Locate
и т. Д.
Внутренне, когда TDataSet открыт, он имеет массив «буферов», которые являются указателями на динамически распределенные блоки памяти, каждый из которых хранит данные одного из смежных диапазоновзаписи в наборе данных.Количество буферов фиксируется при открытии набора данных и определяется тем, какие компоненты с поддержкой db подключены к набору данных;обычно их достаточно для хранения строк в TDbGrid.
TDataSet имеет метод (функцию) ActiveBuffer
, который определен в DB.Pas как
function TDataSet.ActiveBuffer: PChar;
begin
Result := FBuffers[FActiveRecord];
end;
Любая операция редактирования данных набора данных работает с данными записи в ActiveBuffer
Он идентифицируется просто указателем, который возвращает TDataSet.ActiveBuffer
.Это все, что нужно, и именно поэтому операции редактирования записи в наборе данных в памяти работают нормально без ID / PK / SequenceNumber или какого-либо другого поля.
Вот и все, правда.