Обработка на набор от данни в нишка

Пиша клас, има свойство свойство DS: TDataSet чете GetDS записва SetDS; след това, за да сортирам в отделна нишка, създавам TClientDataSet, копирам всичко там. За да позволите на потребителя да промени набора от данни, е възможно да стартирате друга нишка.

procedure TWEThread.SetDST(const Value: TDataSet); var i: Integer; BM: TBookmark; започнете ако Value.IsEmpty тогава повдигнете Exception.Create("TDataSet е празен"); FDST := TClientDataSet.Create(нула); FDST.FieldDefs.BeginUpdate; FDST.FieldDefs := Value.FieldDefs; FDST.FieldDefs.EndUpdate; FDST.CreateDataSet; FDST.DisableControls; BM := Value.GetBookmark; Value.DisableControls; докато не (Value.Eof) направете започнете FDST.Insert; за i := 0 до Value.FieldCount - 1 направете FDST.Fields[i].Value := Value.Fields[i].Value; FDST.Post; Стойност.Напред; край; Value.EnableControls; Value.GotoBookmark(BM); FDST.Първо; Звуков сигнал; край;

тези. след това някъде в нишката в Execute while not(FDST.Eof) do begin Work; FDST.Напред; край;

въпросът е .. докато данните се копират, времето минава, наборът може да се промени Какво ще се случи с копието е страшно да се предположи

ADO има метод Clone. Не го намерих в ODAC. Ползваме и UniDAC, още не съм го гледал.

Как да клонирам DataSet за моите цели? ИЛИ трябва изцяло да променя подхода си? Кое?

Но няма да е възможно да се обработи клонираният набор от данни в друга нишка.

През SQL INSERT/UPDATE няма да се търкаля? На моменти по-бързо и без потоци.

Копирането на набор от данни се извършва най-добре не чрез груба сила, а чрез запазването му в поток и зареждането му в нов.

> докато данните се копират, времето минава, наборът може да бъде > промененоСвойство за достъп DS: TDataSet защити критичната секция, илиTMultipleReadExclusiveWriteSynchronizer

Какво се случва Данните не е ясно от коя база данни, не е ясно предварително. Но компонентите, които ги съдържат, са съвместими с TDataSet. Копирам данните в създадения точно там ClientDataSet и работя с него. Не разбирам къде да ВМЪКНА/АКТУАЛИЗИРАМ?

> Достъп до свойството DS: TDataSet защитава с критична секцияИ аз мисля така

> запазване в поток и качване в нов.точно. ще опитам сега..

> Данните са получени от неясно от коя база данни, не е ясно предварително

Какво значение има откъде идват? Създавате заявка - след това в транзакция я изпълнявате. За какво да влачите потоци?

> докато данните се копират, времето минава, наборът може да бъде > променен > Какво ще се случи с копието е страшно да се предположи

Ето един начин за бързо копиране на данни в TClientDataSet: