![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в IBDataSet сделать Commit? [D6, IB6.x, FireBird]
Ламер © (2003-02-05 09:36:00)Здраствуйте, мастера! Нужна Ваша консультация.
Использую связку IBDatabase->IBTransaction->IBDataSet-DataSet->DBGrid все работатет - я редактирую данные в гриде. Но вот сохраняет данные в базу(на диск) только после закрытия программы.
Как сделать Commit? Что-то не догоню...
Тип (2003-02-05 11:32:00) [1]
>
> Max Zyuzin © (05.02.03 11:10)
> >Ламер (05.02.03 10:59)
> Только тут нужно еще тоже самое вешать на редактирование...
> а то если у тебя пользователи че нить поправят... а потом
> свет :) будет не хорошо :)))
Уже повесил на удаление, и редактирование
> ИМХО все же лучше с кнопочками, и тебе проще и юзверям нагляднее,
да, но мне попроще надо, с кнопками я подумаю...
> вот я нажал на сохранить и усе сохранилось, не нажал и амба
> :) (почти как в Word-е - там же доки не сохраняются после
> набора каждого сивола)
Word - это Microsoft, для юзверят это как Бог, а я еще Ламертак что мои проги должні біть понадежнее...
Johnmen (2003-02-05 11:23:00) [2]>Max Zyuzin © (05.02.03 11:15)
>ИМХО все равно лучше с кнопочками...
Спору нет....:) Хотя все зависит от конкретной ситуации...
Max Zyuzin (2003-02-05 11:15:00) [3]>Johnmen © (05.02.03 11:11)
:о) ИМХО все равно лучше с кнопочками... :)
Johnmen (2003-02-05 11:11:00) [4]>Max Zyuzin © (05.02.03 10:55)
>На событие у датасета AfterInser (вроде так называется) вешай
>CommitRetaining
Смею заметить, что лучше бы AfterPost...
Max Zyuzin (2003-02-05 11:10:00) [5]>Ламер (05.02.03 10:59)
Только тут нужно еще тоже самое вешать на редактирование... а то если у тебя пользователи че нить поправят... а потом свет :) будет не хорошо :)))
ИМХО все же лучше с кнопочками, и тебе проще и юзверям нагляднее, вот я нажал на сохранить и усе сохранилось, не нажал и амба :) (почти как в Word-е - там же доки не сохраняются после набора каждого сивола)
Ламер (2003-02-05 10:59:00) [6]2 Max Zyuzin ©
Спасибо, все работает...Вот что значит не зазнавшийся мастер.
Max Zyuzin (2003-02-05 10:55:00) [7]На событие у датасета AfterInser (вроде так называется) вешай CommitRetaining
Ламер(Ау, Мастера) (2003-02-05 10:53:00) [8]Ну кто-нибудь может помочь?
Ламер (2003-02-05 10:24:00) [9]А как с гридом, что нельзя без кнопочек? Как мне сделать Commit? Мастера, не ужто никто с этим не сталкивался???
Max Zyuzin (2003-02-05 10:22:00) [10]>Ламер (05.02.03 10:16)
Ну тогда делай после каждой вставки CommitRetaining
Или можно по другому сделать... на формочку бросить кнопочки... "сохранить изменения", "не сохранять изменения", ну и там уж рулить Commit или RollBack
Ламер (2003-02-05 10:16:00) [11]С транзакциями я в курсе. Знаю про эффект потери 100 фунтов :)
Но ято скажет юзер, когда он набет данные, сохранил(кеш), на сервак пока нет(Commit), и тут мин через 10 бац - свет выключили... Потом включают, а данные тютю - нету. А скажет, а я же делал... Виноват программист.
Но что же мне делать с смоей траблой????
Max Zyuzin (2003-02-05 10:11:00) [12]>Ламер (05.02.03 10:01)
Транзакции задуманы были, что бы сохранять целостность данных, если ты к примеру забиваешь запись в главную таблицу и сразу же связанные с этой записи в N починенных, тебе надо что бы все это безобразие добавилось сразу... вот тут и нужны транзакции...
А вообще Commit -ы загружают сервер, их нужно делать с умом :)
Ламер (2003-02-05 10:04:00) [13]
>
> Delirium^.Tremens © (05.02.03 09:55)
> Значит перед стартом проверить ее на активность и, если
> активна, не стартовать. После Post
Делаю Commit.
Ошибка - Cannot perform this operation on close dataset...
Эта поперация не может быть выполнена для закрытого DataSet. Что же ё маё делать....
Ламер (2003-02-05 10:01:00) [14]2 Max Zyuzin ©
>>и подтверждать ее после каждой вставки
Только не понятно, на случай выключения света и глюков, что с данными будет? Мне не понятно когда данные могут не нести ценности? Таких не должно просто быть...
Delirium^.Tremens (2003-02-05 09:55:00) [15]Значит перед стартом проверить ее на активность и, если активна, не стартовать. После Post или ApplyUpdates делать Commit.
Max Zyuzin (2003-02-05 09:55:00) [16]Это было в 2-х словах. Вообще транзакция стартуется по умолчанию как только ты открываешь датасет. По этому тебе надо делать просто Commit
Да и не рекомендуется стартовать транзакцию и подтверждать ее после каждой вставки... хотя все конечно зависит от задачи.
Ламер (2003-02-05 09:49:00) [17]
> Delirium^.Tremens © (05.02.03 09:38)
> В общих чертах:
>
> IBTransaction.StartTransaction;
> {... Делаем свои гнусные дела...}
Я написал , что редактирование в гриде. Я делал IBTransaction.StartTransaction в событии BeforeInsert(IBDataSet), но мне говорится, что транзакция активна.
Delirium^.Tremens (2003-02-05 09:38:00) [18]В общих чертах:
IBTransaction.StartTransaction;
{... Делаем свои гнусные дела...}
IBTransaction.Commit;