![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
concurrent update
Duncan © (2003-08-21 15:11:00)
Ребята, подскажите как бороться с ошибкой "concurrent update"?
Duncan (2003-08-22 12:12:00) [1]
Попробуем последний вариант.
Спасибо за помощь!
Johnmen (2003-08-22 10:08:00) [2]
IBTransaction.StartTransaction;
qLogs.SQL.Clear;
qLogs.SQL.Add...;
qLogs.SQL.ExecSQL;
...
IBTransaction.Commit;
Sergey13 (2003-08-22 09:58:00) [3]
2Duncan (22.08.03 09:40) [10]
1. Ведение лога логичнее было бы переложить на тригер. И быстрее и надежнее.
2.А не правильнее было бы qLogs.Execute вместо qLogs.Open?
3.Что то я сомневаюсь в такой организации транзакций. Более опытные IB-шники пусть меня поправят.
4.Вместо динамического создания запросов лучше использовать запросы с параметрами. И работают быстрее и читаются лучше.
Zacho (2003-08-22 09:43:00) [4]
> Duncan (22.08.03 09:40) [10]
> qLogs.SQL.Add("commit");
Это еще что ??? Нет такого оператора SQL в IB.
Duncan (2003-08-22 09:40:00) [5]
Криво конечно, но что-то типа этого:
qLogs.SQL.Clear;
qLogs.SQL.Add("update organization set orgThisMonth="+tm+", Money=Money-"+df+" where orgId="+IntToStr(orgId));
qLogs.Open;
qLogs.SQL.Clear;
qLogs.SQL.Add("insert into logs values (GEN_ID(LOG_GEN,1), "+IntToStr(orgId)+", "+IntToStr(tin)+", "+ IntToStr(tout)+", "+#39+DateToStr(Date)+#39+", "+#39+TimeToStr(tt)+#39+", "+#39+IP[j].ip+#39+", ");
if (IP[j].way) then qLogs.SQL.Add("1)") else qLogs.SQL.Add("0)");
qLogs.Open;
qLogs.SQL.Clear;
qLogs.SQL.Add("commit");
qLogs.Open;
собсвенно во втоорой проге что-то типа этого же.
Sergey13 (2003-08-22 09:29:00) [6]
2Duncan (21.08.03 17:00) [6]
>Ну задача самая простая: 1 прога обновляет клиентские счета за разговоры, другая обновляет за трафик
Каким образом это работает сейчас? Код ведь просили уже.
Zacho (2003-08-22 09:28:00) [7]
> Duncan (22.08.03 09:22) [7]
http://www.ibase.ru/develop.htm, особое внимание обрати на http://www.ibase.ru/devinfo/ibtrans.htm
Duncan (2003-08-22 09:22:00) [8]
Подскажите где можно толково (желательно с примерами) хотя бы почитать?
Duncan (2003-08-21 17:00:00) [9]
Ну задача самая простая: 1 прога обновляет клиентские счета за разговоры, другая обновляет за трафик. И они умудряются пересекаться :-). А может использовать какой-нибудь exeption типа:
procedure zapros;
begin
try
Query.Open;
exсept on E:.... do begin
Sleep(500);
zapros; end
end
End;
Вот только что ставить вместо .....?
Desdechado (2003-08-21 16:39:00) [10]
ну, и если 2 юзера одну запись менять хотят, то это не совсем нормально (хотя, от задачи зависит). Кто последний, тот и папа :)
Sandman25 (2003-08-21 16:23:00) [11]
... и чтобы работали они как можно быстрее.
Johnmen (2003-08-21 16:05:00) [12]
Делать пишущие транзакции как можно короче.
Duncan (2003-08-21 15:32:00) [13]
БД Interbase 6, параметры для транзакции: write, nowait, consistency.
VAleksey (2003-08-21 15:21:00) [14]
Тип БД и код.