Форум: "Базы";
Текущий архив: 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.04 c