Форум: "Базы";
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];
ВнизПОМОГИТЕ, как в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c