Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.003 c
4-90423
Люк
2001-11-29 12:59
2002.01.28
Управление памятью


3-90226
Ross
2001-12-24 21:58
2002.01.28
ProgressBar


3-90219
Oleg_K
2001-12-17 21:03
2002.01.28
DBEdit в фокусе


4-90414
Gennady
2001-11-28 13:45
2002.01.28
Clipboard


3-90214
Savage
2001-12-21 02:44
2002.01.28
Как пользователь может узнать о изменениях данных, сделанных другим пользователем?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский