|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Динамически создать массив VarRec
Всем добрый день!
Итак, хочу реализовать клонирование строки в 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, т.е. они не пропускаются. |