Главная страница
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.008 c
7-90405
Лана Розанова
2001-10-11 12:07
2002.01.28
Путь к каталогу


14-90378
limon
2001-12-05 19:16
2002.01.28
> Merlin. Глюк при записи ответа


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


1-90290
Delphimun
2002-01-07 12:11
2002.01.28
Как найти в заданном тексте, сочетания символов, которые подходят заданной схеме?


4-90415
valery_f
2001-11-27 13:02
2002.01.28
Перехват экранного вывода DOS приложений