Помогите обуздать транзакцию!
Помогите обуздать транзакцию!
Пишу работу с базой на дельфи, сервер FireBird 1.5.2
вот что происходит:
делаю инсерт
поместил в поле name временное значение "!"
сделал пост, без коммита - записи в базе нет
сбросил значение поля name в null
установил значение поля name "и"
делаю пост с коммитом - в базе запись появилась
значение поля - "!"
что за фигня?
вот что происходит:
делаю инсерт
поместил в поле name временное значение "!"
сделал пост, без коммита - записи в базе нет
сбросил значение поля name в null
установил значение поля name "и"
делаю пост с коммитом - в базе запись появилась
значение поля - "!"
что за фигня?
Re: Помогите обуздать транзакцию!
Руками?Aprell писал(а):делаю инсерт...
Это ты описываешь "что должно быть сделано". А что, как и чем на самом деле делаешь?
через pFIBDataSet
нужен код? Просто думал достаточно подробно написал что просиходит...
вот куски кода:
при нажатии добавить
нужен код? Просто думал достаточно подробно написал что просиходит...
вот куски кода:
при нажатии добавить
Код: Выделить всё
Navigator.DataSource.DataSet.Insert;
if SimpleCreate then
begin
-- заполняем поля временными значениями, id генерим сами
Navigator.DataSource.DataSet.Post;
Navigator.DataSource.DataSet.Locate('id', id, []);
Navigator.DataSource.DataSet.Edit;
end;
procedure dsActualStateChange(Sender: TObject);
begin
if dsActual.DataSet.State = dsInsert then
if SimpleCreate then dsActual.DataSet.Tag := -1 else dsActual.DataSet.Tag := 0;
end;
end;
у контейнера обработка:
procedure TDM.fibContainerDataSetEvent(DataSet: TDataSet;
Event: TKindDataSetEvent);
begin
case Event of
deAfterPost : begin
if DataSet.Tag = 0 then
(DataSet as TpFIBDataSet).Transaction.CommitRetaining;
end;
deAfterDelete : (DataSet as TpFIBDataSet).Transaction.CommitRetaining;
deAfterCancel : begin
(DataSet as TFibDataSet).Transaction.RollbackRetaining;
end;
end;
end;
жмём на кнопку Сохранить:
procedure BtnOKClick(Sender: TObject);
begin
if (Owner as TfrMain).Navigator.DataSource.DataSet.State in [dsEdit, dsInsert] then
begin
if (Owner as TfrMain).SimpleCreate then (Owner as TfrMain).Navigator.DataSource.DataSet.Tag := 0;
(Owner as TfrMain).Navigator.DataSource.DataSet.Post;
end;
Close;
end;Re: Помогите обуздать транзакцию!
Это не фигня, а вредность разработчиков. Они, сцуки, спициятельно так сделали, что пока коммита нету, из других транзакциев записи не видать. Они над нами издеваются.Aprell писал(а):Пишу работу с базой на дельфи, сервер FireBird 1.5.2
вот что происходит:
делаю инсерт
поместил в поле name временное значение "!"
сделал пост, без коммита - записи в базе нет
сбросил значение поля name в null
установил значение поля name "и"
делаю пост с коммитом - в базе запись появилась
значение поля - "!"
что за фигня?
-
Ivan_Pisarevsky
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Re: Помогите обуздать транзакцию!
Э, батенька да Вы не то что в трех, Вы в двух соснах (транзакциях) заблудились.Aprell писал(а):Пишу работу с базой на дельфи, сервер FireBird 1.5.2
...
что за фигня?