Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Update [D7, IB6.x]


Mery ©   (2008-11-17 08:57:00) 

В IBQuery обновляю записи одной таблицы данными другой.
При этом, изменения вижу только после переоткрытия приложения, а не после переоткрытия таблицы в приложении.
В чём может быть проблема?


MsGuns   (2008-11-17 11:23:00) [1]

То, что у вас изменение и извлечение для отображения выполняется в РАЗНЫХ транзакция как раз не ошибка, а правильность, во вском случае для ИБ.
Вам необходимо лишь разобраться в том, как их "синхронизировать", что вовсе не является трудной задачей


Mery   (2008-11-17 11:16:00) [2]

>Sergey13 ©   (17.11.08 10:01) [9]
> А QUp видимо работает в ДРУГОЙ транзакции
Точно, спасибо, из-за такой ерундовой ошибки больше часа голову ломаю. Что-то меня заклинило..


MsGuns   (2008-11-17 10:55:00) [3]

Читать про уровни изоляции транзакций


Sergey13   (2008-11-17 10:01:00) [4]

> [8] Mery   (17.11.08 09:55)
> Странно. когда всё это делаю в цикле edit-post, то всё нормально.
> почему с Update так не получается?

Ничего странного. Цикл edit-post относится к компоненте и работает ее методами, к которым относится и твой CommitRetaining. Вернее он относится к транзакции, которая, как я понял, привязана к твоей IBTable. А QUp видимо работает в ДРУГОЙ транзакции, которую ты напрямую НЕ подтверждаешь (подтверждение проходит неявно при закрытии приложения). Поэтому из одной транзакции ты вполне логично не видишь неподтвержденные изменения другой транзакции.

ЗЫ: Вообще недурно бы прочитать букварик по транзакциям на ibase.ru


Mery   (2008-11-17 09:55:00) [5]

>правишь напрямую в таблице БД, а коммитишь в копоненте IBTable
разве это не одно и то же: IBTable и есть связь  с физической таблицей. как тогда быть? Если использую IBDataSet, вместо IBTable, результат тот же.
Странно. когда всё это делаю в цикле edit-post, то всё нормально. почему с Update так не получается?


Sergey13   (2008-11-17 09:39:00) [6]

> [6] Mery   (17.11.08 09:33)

это не важно, я просто не то скопировал. Важно, что ты правишь напрямую в таблице БД, а коммитишь в копоненте IBTable (от которого лучше вообще отказаться в пользу IBDataSet-а), а это далеко не одно и то-же.


Mery   (2008-11-17 09:33:00) [7]

нет, правлю в table1


Sergey13   (2008-11-17 09:32:00) [8]

> [4] Mery   (17.11.08 09:22)

Ты деньги тратишь налом из кошелька, а подтверждаешь изменения на банковском счете.
Твой CommitRetaining относится к компонентуtable1, а правишь данные ты в физической таблицеtable2.


Mery   (2008-11-17 09:22:00) [9]

table1.open;
table2.open;

try

QUp.Close;
QUp.SQL.Clear;
QUp.SQL.Add('update table1 set pole1=(select pole1 from table2 where table2.icod=table1.icod) where icod in(select icod from table2)');
QUp.Open;

QUp.Close;
QUp.SQL.Clear;
QUp.SQL.Add('update table1 set pole2=(select pole2 from table2 where table2.icod=table1.icod) where icod in(select icod from table2)');
QUp.Open;

Tran_table1.CommitRetaining;
except
Tran_table1.RollbackRetaining;
exit;
end;


Sergey13   (2008-11-17 09:13:00) [10]

> [2] Mery   (17.11.08 09:09)
> после серии Update, выполняю CommitRetaining;

Ты код уже конкретный напиши, а то по понедельникам у меня телепатор в ауте.


Mery   (2008-11-17 09:09:00) [11]

после серии Update, выполняю CommitRetaining;
А что значит: подтверждать?


Sergey13   (2008-11-17 09:04:00) [12]

> [0] Mery   (17.11.08 08:57)
> В чём может быть проблема?

Например в игнорировании транзакций, которые надо подтверждать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо