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

Вниз

ClientDataSet   Найти похожие ветки 

 
Term ©   (2004-05-11 11:17) [0]

MIDAS.
Вопрос такой, добавляю запись в ClientDataSet делаю ApplyUpdates(), но запись оказывается в БД только после разрыва соединения TSocketConnection, ну это и естественно т.к. транзакция подтверждается при разрыве, но как сделать так чтобы её сразу подтверждать.


 
31512 ©   (2004-05-11 11:45) [1]


> транзакция подтверждается при разрыве

Здесь что-то не так. Транзакция закончивается commit transaction
по единому правилу : "или всё или ничего". Уточни контекст использования ApplyUpdates(). ApplyUpdates(Что тут?).


 
31512 ©   (2004-05-11 11:51) [2]

Следующий код в моём приложении работает железно.


function SaveChanges(ClientDataSet : TClientDataSet) : boolean;
begin
 Result := False;
 if (ClientDataSet.ChangeCount > 0) then
    begin
      if ClientDataSet.ApplyUpdates(0 или -1) = 0 then
         begin
          ClientDataSet.Refresh;
          Result := True;
         end
      else Result := False;
    end;
end;


 
Курдль ©   (2004-05-11 11:59) [3]


> Следующий код в моём приложении работает железно.

Что-то глаз режет... Я почти не работал с ClientDataSet, но если для него надо выделывать такое, то и не буду.
Общее правило для утверждения изменений - DB.ApplyUpdates([DataSet1, ... DataSetN), где DB - компонент сессии с БД.


 
31512 ©   (2004-05-11 12:13) [4]

Для Курдль


> Что-то глаз режет... Я почти не работал с ClientDataSet


В моём контексте, это мне показалось приемлемым решением. Готов рассмотреть предложения по поводу кода, где требуется по нажатии кнопки записать изменения в БД. Разница лишь названиях этих ClientDataSet. Вот я и написал единую для всех функциию и передаю туда тот ClientDataSet, для которого мне нужно выполнить сохранение. Готов рассмотреть предложения.


 
Курдль ©   (2004-05-11 12:54) [5]

Глянул я на ТSocketConnection - ничче сказать не могу. :(
И не знаю, чем обусловлено применение ТClientDataSet у Вас.


 
31512 ©   (2004-05-11 13:06) [6]


> Глянул я на ТSocketConnection - ничче сказать не могу. :(
> И не знаю, чем обусловлено применение ТClientDataSet у Вас.

А потому, что MIDAS. Можно посмотреть тут http://rsdn.ru/article/db/midas.xml/
+
Тейксейра с Пачекой (двухтомник по Delphi 5), том 2,  Часть IV, Глава 32. Особенно стр. 736. Интересная там схемка имеется.


 
Курдль ©   (2004-05-11 14:04) [7]

Меня именно заинтересовало, почему MIDAS?


 
31512 ©   (2004-05-11 14:31) [8]


> Меня именно заинтересовало, почему MIDAS?

Я могу рассказать только почему я выбрал MIDAS.
Мне нужна была многоуровневость.
В кратце:
1. Логика БД и работы с ней, отделена от клиента, а клиентское приложение предоставляет лишь удобную форму представления данных.
2. Нет зависимости от платформы БД.
3. Все этапы работы с БД прозрачны и просто настраиваются.

В моём случае MIDAS мне подходит более всего.

В других случаях, он может и не найти применения.

Можно почитать тут
http://www.delphimaster.ru/articles/midas/index.html
http://www.delphimaster.ru/articles/midas2/index.html


 
Term ©   (2004-05-11 15:36) [9]


> if ClientDataSet.ApplyUpdates(0 или -1) = 0 then
>          begin
>           ClientDataSet.Refresh;
>           Result := True;
>          end

т.е. по логике после ApplyUpdates надо делать Refresh чтобы подтвердить транзакцию???


 
Term ©   (2004-05-11 15:52) [10]


> Здесь что-то не так. Транзакция закончивается commit transaction
> по единому правилу : "или всё или ничего". Уточни контекст
> использования ApplyUpdates(). ApplyUpdates(Что тут?).


использую сервер FB 1.0, компонент доступа TIBDataSet и TIBTransaction находятся в TRemoteDataModule т.е. на сервере приложений, с TIBDataSet связан DataSetProvider1.
На клиенте лежит TSocketConnection через него подключен TClientDataSet и у него прописанно св-во ProviderName DataSetProvider1. Делаю ClientDataSet1.Active:=true; вижу записи в БД, добавляю запись делаю ApplyUpdates(0), и пока не закрою TSocketConnection транзакция не подтверждается


 
Term ©   (2004-05-11 16:15) [11]

а если на клиенте только TSoketConection и TClientDataSet как мне подтвердить транзакцию, там нет никаких Commit ведь.


 
Romkin ©   (2004-05-11 16:51) [12]

Работой с транзакциями должен заниматься провайдер. Обычно так и происходит. Если транзакцию он не закрыл - значит, это не он ее открыл либо не все данные взяты.


 
Term ©   (2004-05-11 17:26) [13]


> это не он ее открыл либо не все данные взяты

добавляю ОДНУ запись, после закрытия SoketConection, она в БД, значит всё передалось.
А кто как не он её открывает если, я просто связываю компоненты, и ClientDataSet делаю active:=true;

потом:
ClientDataSet.append;
...
ClientDataSet.Post;
ApplyUpdates(0);

всё просто, но видать чего то не хватает, вот я и интересуюсь чего именно, вроде всё связанно как и описанно в выше указанных статьях


 
Romkin ©   (2004-05-11 17:40) [14]

Угу. Чего-то не хватает...
У тебя случайно TIBTransaction.AutoStopAction не в saNone установлено? Надо бы saCommit, чтобы транзакция закрывалась, когда датасеты ее закрыты все...


 
Term ©   (2004-05-11 17:54) [15]


>Надо бы saCommit

так и есть!!!!!!!!!! буду пробывать, если поможет с меня ящик водки и жаренный баран



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

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

Наверх




Память: 0.5 MB
Время: 0.024 c
7-1083153850
CyBeR
2004-04-28 16:04
2004.05.30
Переключение между формами с помощью набора закладок


3-1083765179
Dimedrol
2004-05-05 17:52
2004.05.30
Компонент типа DBTreeView


11-1072781364
Vadim Petrov
2003-12-30 13:49
2004.05.30
XHelpgen и новаый KOL


4-1082055682
Анатолий Ксюндзский
2004-04-15 23:01
2004.05.30
CreateProcess ??


11-1073649843
Sane
2004-01-09 15:04
2004.05.30
Таймер в кол... помогите..)