procedure TTableRecordCopy(Source, Destination: TTable);
{ПРЕДПОЛОЖЕНИЕ: Обе таблицы имеют курсор в нужной строке и
компоненты Table ссылаются на таблицы с совместимыми величинами.}var
i, lCount: Integer;
begin
lCount := Source.FieldCount;
for i := 0 to lCount - 1 doif (not Source.Fields[i].IsNull) and (Source.Fields[i].CanModify) then
Destination.FieldByName(Source.Fields[i].FieldName).Assign(Source.Fields[i]);
end;
Это работает для всех типов полей.
Here is the translation of the text into Russian:
Цель: Процедура предполагает, что оба таблицы имеют курсор, установленный на желаемую строку, и компоненты Table ссылается на таблицы с совместимыми размерами полей.
Переменные:
i: целочисленная переменная, используемая как счетчик цикла
lCount: целочисленная переменная, хранящая количество полей в исходной таблице
Цикл: Процедура проходит по каждому полю (0 до lCount - 1) в исходной таблице с помощью следующего логика:
+ Проверьте, является ли поле не null и может быть изменено (CanModify свойство равно true)
+ Если оба условия выполнены, присвойте значение поля источника соответствующему полю в целевой таблице с помощью метода Assign.
Замечания:
Это код работает для всех типов полей (например, целые числа, строки, даты и т.д.).
Метод FieldByName используется для получения ссылки на поле в целевой таблице с тем же именем, что и источник.
Свойство CanModify проверяется, чтобы обеспечить копирование только не null и изменяемых полей.
Альтернативное решение: Если вы хотите сделать код более эффективным, можно использовать цикл с перечислением вместо использования свойства FieldCount и индексации. Кроме того, можно использовать метод GetFieldByName, чтобы получить ссылку на поле в одном шаге:
procedure TTableRecordCopy(Source, Destination: TTable);
var
i: Integer;
begin
for i := low(TField) to high(TField) do
if not Source.Fields[i].IsNull and Source.Fields[i].CanModify then
Destination.GetFieldByName(Source.Fields[i].FieldName).Assign(Source.Fields[i]);
end;
В этом коде используются функции low и high из единицы System.SysUtils, чтобы получить диапазон валидных индексов для типа TField, что eliminates the need for manual indexing.
В статье представлен код на Delphi, который позволяет копировать записи из одной таблицы в другую.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.