Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.28;
Скачать: CL | DM;

Вниз

ПОМОГИТЕ, как в MIDAS сохранить несколько TClientDataSet-ов в одной транзакции?   Найти похожие ветки 

 
AlexM   (2001-12-20 16:01) [0]

Хелп!!! Технология MIDAS. Нужно реализовать сохранение обновлений нескольких TClientDataSet-ов клиента в одной транзакции. Как эту проблему решить?


 
Romkin ©   (2001-12-20 17:16) [1]

TDatabase.StartTransaction...
Просто передать в метод сервера оба пакета, там открыть транзакцию и провоести оба через провайдеры,
Или вывести методы Database в методы сервера, и работать с транзакцией на клиенте - если транзакция открыта не провайдером, он ее закрывать не будет


 
AlexM   (2001-12-21 06:46) [2]

2Romkin
подскажите чайнику, как "передать в метод сервера оба пакета"?


 
Romkin ©   (2001-12-21 10:38) [3]

у ClientDataSet есть свойство Delta, это и есть пакет изменений, а у провайдера есть метод ApplyUpdates.
Ничего не мешает и простому вызову AS_ApplyUpdates из самого RDM
Следовательно, передаешь на сервер две Delta как OleVariant, вызываешь ApplyUpdates у провайдеров, и передаешь обратно результата ErrCount и результирующий пакет для вызова CDS.REconsile
Подробнее - хелп по этим методам, и посмотри реализацию ApplyUpdates у TClientDataSet


 
AlexM   (2001-12-21 12:33) [4]

2Romkin
как передать - понял - спасибо
но как на сервере организовать два AS_ApplyUpdates в одной транзакции?
этот AS_ApplyUpdates пишет прямо в базу если у DataSetProvider свойство ResolveToDataSet=true даже если сночала вставить SetTransaction,
а если ResolveToDataSet=false то данные вообще теряются?!


 
Romkin ©   (2001-12-21 13:36) [5]

1. Database.StartTransaction
2. ApplyUpdates
3. Database.Commit|Rollback
А режим Resolve просто определяет, вставлять ли в TTable|TQuery и использовать их методы, либо просто генерить SQL


 
Сергей Иванов ©   (2001-12-21 14:12) [6]

//где-то в начале
var
TransactionContextEx :ITransactionContextEx;

function TParusServer.UpdateDocs(const Dest, Source, DocType, Context,
DispNum, SubD, SubK: WideString; Date_Of: TDateTime; Datu: Integer;
Sum_of: Double): Integer;
var RegN :integer;
begin
//создаем контекст транз
TransactionContextEx := CreateTransactionContextEx;
OleCheck(TransactionContextEx.CreateInstance(CLASS_ParusServer, IParusServer, ParusServer));
try
//что-нибудь делаем
if not IBase.TestConnected then IBase.Open;
Trans.Active := true;

with JornalQuery do begin
if Active then Close;
Params.ParamValues["RECNO"] := ID;
Prepare; Open; //First;
end; {with JornalQuery}
if not OpBase.Active then OpBase.Active := true;
OpBase.Locate("OpNum", VnOpNum, []);
if not OpSpec.Active then OpSpec.Active := true;

...

...
//сохранаяем. например, ApplyUpdates(0) и пр.
TransactionContextEx.Commit;
except
result := -1;
TransactionContextEx.Abort;
end;
end;


 
AlexM   (2001-12-22 09:18) [7]

2Romkin - большое спасибо за ответы - но у меня пока не "выходит каменный цветок"
Database.StartTransaction
try
ApplyUpdates
если здесь происходит ошибка, то Rollback не помогает вернуть данные, ApplyUpdates похоже какимто образом commit уже вызвал!!!!????
Database.Commit
except
Rollback
end
я использую Direct Oracle Access 3.4.5
так что вместо TDatabase у меня TOracleSession
а вместо TDataSet - TOracleDataSet
AS_ApplyUpdates пишет данные в TOracleDataSet????



Страницы: 1 вся ветка

Текущий архив: 2002.01.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
4-90434
a-leksey
2001-11-26 11:39
2002.01.28
Нужно на время и конкретно отключить клавиатуру и мышь


3-90200
avodous
2001-12-24 00:56
2002.01.28
TIBQuery + TIBUpdateSQL


1-90312
tovSuhov
2002-01-11 13:43
2002.01.28
Люди, помогите!!!


14-90357
РУС
2001-12-02 14:59
2002.01.28
Помнится тут был разговор о восстановлении зрения...


7-90399
VEG
2001-10-14 10:38
2002.01.28
Поиск файлов в какалоге.