![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем добрый день!
Итак, хочу реализовать клонирование строки в DataSet. Пытаюсь реализовать такую мысль Код:
procedure TMSExtQuery.CloneCurRecord(IgnoreFields: array of const); begin AppendRecord(RecordFieldsValue(IgnoreFields)); end; Функция составления массива Код:
Type
TFieldsArray = array of TVarRec;
function TMSExtQuery.RecordFieldsValue(IgnoreFields: array of const): TFieldsArray;
var
Idx: integer;
begin
SetLength(Result, FieldCount);
for Idx := 0 to Pred(FieldCount) do
if not FieldInArray(Fields[Idx], IgnoreFields) then
Result[Idx] := VarToVarRec(Fields[Idx].Value)
else
Result[Idx] := VarToVarRec(Null);
end;
function VarToVarRec(const AInput: Variant): TVarRec;
begin
Result.VType := vtVariant;
Result.VVariant := @AInput;
end;В такой конфигурации выдает ошибку Invalbd value for field и далее первое поле. Если же я делаю такую конструкцию Код:
procedure TMSExtQuery.CloneCurRecord(IgnoreFields: array of const); begin AppendRecord([Null,'абвгд','абвгд1',2,Null,4,Null]); end; То все работает, подскажите как правильно сформировать массивTVarRec |
|
#2
|
||||
|
||||
|
Смотрите входные переменные у AppendRecord, очевидно что и структура у записей TVarRec должна с ними совпадать
|
|
#3
|
|||
|
|||
|
в функции RecordFieldsValue как раз Fields используется для этого.
Так что кол-во и данные соответствую исходному датасету, за исключением игнорируемых полей где должно быть Null, т.е. они не пропускаются. |