Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1225338523
TUser
2008-10-30 06:48
2008.12.28
Шлюз между Рунетом и остальной Сетью


2-1227080020
Andrey_ka
2008-11-19 10:33
2008.12.28
ошибка при закрытии проэкта


15-1225052523
koha!
2008-10-26 23:22
2008.12.28
Консоль для супер маленьких


2-1226579779
Andrey_ka
2008-11-13 15:36
2008.12.28
как определить высоту mainmenu?


1-1204962203
GrafDrakula
2008-03-08 10:43
2008.12.28
Прозрачный Listbox1, memo(richedit)