![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)
> В чём может быть проблема?
Например в игнорировании транзакций, которые надо подтверждать.