Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
ВнизUpdate Найти похожие ветки
← →
Mery (2008-11-17 08:57) [0]В IBQuery обновляю записи одной таблицы данными другой.
При этом, изменения вижу только после переоткрытия приложения, а не после переоткрытия таблицы в приложении.
В чём может быть проблема?
← →
Sergey13 © (2008-11-17 09:04) [1]> [0] Mery (17.11.08 08:57)
> В чём может быть проблема?
Например в игнорировании транзакций, которые надо подтверждать.
← →
Mery (2008-11-17 09:09) [2]после серии Update, выполняю CommitRetaining;
А что значит: подтверждать?
← →
Sergey13 © (2008-11-17 09:13) [3]> [2] Mery (17.11.08 09:09)
> после серии Update, выполняю CommitRetaining;
Ты код уже конкретный напиши, а то по понедельникам у меня телепатор в ауте.
← →
Mery (2008-11-17 09:22) [4]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:32) [5]> [4] Mery (17.11.08 09:22)
Ты деньги тратишь налом из кошелька, а подтверждаешь изменения на банковском счете.
Твой CommitRetaining относится к компоненту table1, а правишь данные ты в физической таблице table2.
← →
Mery (2008-11-17 09:33) [6]нет, правлю в table1
← →
Sergey13 © (2008-11-17 09:39) [7]> [6] Mery (17.11.08 09:33)
это не важно, я просто не то скопировал. Важно, что ты правишь напрямую в таблице БД, а коммитишь в копоненте IBTable (от которого лучше вообще отказаться в пользу IBDataSet-а), а это далеко не одно и то-же.
← →
Mery (2008-11-17 09:55) [8]>правишь напрямую в таблице БД, а коммитишь в копоненте IBTable
разве это не одно и то же: IBTable и есть связь с физической таблицей. как тогда быть? Если использую IBDataSet, вместо IBTable, результат тот же.
Странно. когда всё это делаю в цикле edit-post, то всё нормально. почему с Update так не получается?
← →
Sergey13 © (2008-11-17 10:01) [9]> [8] Mery (17.11.08 09:55)
> Странно. когда всё это делаю в цикле edit-post, то всё нормально.
> почему с Update так не получается?
Ничего странного. Цикл edit-post относится к компоненте и работает ее методами, к которым относится и твой CommitRetaining. Вернее он относится к транзакции, которая, как я понял, привязана к твоей IBTable. А QUp видимо работает в ДРУГОЙ транзакции, которую ты напрямую НЕ подтверждаешь (подтверждение проходит неявно при закрытии приложения). Поэтому из одной транзакции ты вполне логично не видишь неподтвержденные изменения другой транзакции.
ЗЫ: Вообще недурно бы прочитать букварик по транзакциям на ibase.ru
← →
MsGuns © (2008-11-17 10:55) [10]Читать про уровни изоляции транзакций
← →
Mery (2008-11-17 11:16) [11]>Sergey13 © (17.11.08 10:01) [9]
> А QUp видимо работает в ДРУГОЙ транзакции
Точно, спасибо, из-за такой ерундовой ошибки больше часа голову ломаю. Что-то меня заклинило..
← →
MsGuns © (2008-11-17 11:23) [12]То, что у вас изменение и извлечение для отображения выполняется в РАЗНЫХ транзакция как раз не ошибка, а правильность, во вском случае для ИБ.
Вам необходимо лишь разобраться в том, как их "синхронизировать", что вовсе не является трудной задачей
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c