Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
14-1084338738
syte_ser78
2004-05-12 09:12
2004.05.30
ваши предпочтения


4-1082300345
Privet10
2004-04-18 18:59
2004.05.30
Как управлять PGP


14-1084214136
PaRL
2004-05-10 22:35
2004.05.30
Самообразование


1-1084476875
SergeyV
2004-05-13 23:34
2004.05.30
Как в RichEdit выделить цветом конкретное слово


14-1084134741
Sanek_metaller
2004-05-10 00:32
2004.05.30
Сфера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский