Данные из ADODB._Recordset -> TRxMemoryData

HOME_X
Дата: 02.10.2019 17:42:21
Доброго дня господа
Необходимо перегнать данные из ADODB._Recordset -> TRxMemoryData
Ранее при работе с ADOQuery использовал компактный набор команд

    mdMark.Close;
    mdMark.FieldDefs:=ADOQuery.FieldDefList.DataSet.FieldDefs;
    mdMark.LoadFromDataSet(ADOQuery,0,lmAppend);


Теперь тип источника изменился , стал ADODB._Recordset
Использовать циклический перебор полей и записей громоздко (там еще
надо приводить константы типов TOleEnum к TFieldType)

Может есть более корректный и лаконичный прием

Спасибо
Hammer
Дата: 03.10.2019 12:47:38
HOME_X,
procedure RecordsetToRxMemoryData(src: _Recordset; dst: TRxMemoryData);
var
q : TADOQuery;
begin
 q := TADOQuery.Create(nil);
 try
   q.Recordset := src;
   dst.Close;
   dst.FieldDefs:=q.FieldDefList.DataSet.FieldDefs;
   dst.LoadFromDataSet(q,0,lmAppend);
 finally
   FreeAndnil(q);
 end;
end;


PS: Писалось "на коленке"
HOME_X
Дата: 05.10.2019 14:47:19
Hammer
HOME_X,
procedure RecordsetToRxMemoryData(src: _Recordset; dst: TRxMemoryData);
var
q : TADOQuery;
begin
 q := TADOQuery.Create(nil);
 try
   q.Recordset := src;
   dst.Close;
   dst.FieldDefs:=q.FieldDefList.DataSet.FieldDefs;
   dst.LoadFromDataSet(q,0,lmAppend);
 finally
   FreeAndnil(q);
 end;
end;


PS: Писалось "на коленке"



Спасибо ... аналогично
    asMark:=TADODataSet.Create(Nil);
    asMark.Recordset:=_Recordset(IDispatch(ovRecordSet));
    asMark.First;
    mdMark.Close;
    mdMark.FieldDefs:=asMark.FieldDefs;
    mdMark.LoadFromDataSet(asMark,0,lmAppend);
    asMark.Close;
    asMark.Free;
    asMark:=Nil;


P.S. не думал что объект имеет обратную связь
Предполагал сначала поля - потом данные, здесь дал RecordSet сформировался ВЕСЬ пакет

Еще раз спасибо