Главная страница
    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.48 MB
Время: 0.037 c
14-1084074388
Апач
2004-05-09 07:46
2004.05.30
Вечный вопрос: Мужчина и Женщина


3-1083365155
TankMan
2004-05-01 02:45
2004.05.30
An error occurred while attempting initialize the BDE....


14-1083909758
stone
2004-05-07 10:02
2004.05.30
Без прав теперь не покататься. Даже на мопеде


1-1084459200
WebErr
2004-05-13 18:40
2004.05.30
template for Pascal


3-1084345728
roadstar
2004-05-12 11:08
2004.05.30
SQL-запрос?





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