Текущий архив: 2003.09.11;
Скачать: CL | DM;
Внизconcurrent update Найти похожие ветки
← →
Duncan (2003-08-21 15:11) [0]Ребята, подскажите как бороться с ошибкой "concurrent update"?
← →
VAleksey (2003-08-21 15:21) [1]Тип БД и код.
← →
Duncan (2003-08-21 15:32) [2]БД Interbase 6, параметры для транзакции: write, nowait, consistency.
← →
Johnmen (2003-08-21 16:05) [3]Делать пишущие транзакции как можно короче.
← →
Sandman25 (2003-08-21 16:23) [4]... и чтобы работали они как можно быстрее.
← →
Desdechado (2003-08-21 16:39) [5]ну, и если 2 юзера одну запись менять хотят, то это не совсем нормально (хотя, от задачи зависит). Кто последний, тот и папа :)
← →
Duncan (2003-08-21 17:00) [6]Ну задача самая простая: 1 прога обновляет клиентские счета за разговоры, другая обновляет за трафик. И они умудряются пересекаться :-). А может использовать какой-нибудь exeption типа:
procedure zapros;
begin
try
Query.Open;
exсept on E:.... do begin
Sleep(500);
zapros; end
end
End;
Вот только что ставить вместо .....?
← →
Duncan (2003-08-22 09:22) [7]Подскажите где можно толково (желательно с примерами) хотя бы почитать?
← →
Zacho (2003-08-22 09:28) [8]
> Duncan (22.08.03 09:22) [7]
http://www.ibase.ru/develop.htm , особое внимание обрати на http://www.ibase.ru/devinfo/ibtrans.htm
← →
Sergey13 (2003-08-22 09:29) [9]2Duncan (21.08.03 17:00) [6]
>Ну задача самая простая: 1 прога обновляет клиентские счета за разговоры, другая обновляет за трафик
Каким образом это работает сейчас? Код ведь просили уже.
← →
Duncan (2003-08-22 09:40) [10]Криво конечно, но что-то типа этого:
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;
собсвенно во втоорой проге что-то типа этого же.
← →
Zacho (2003-08-22 09:43) [11]
> Duncan (22.08.03 09:40) [10]
> qLogs.SQL.Add("commit");
Это еще что ??? Нет такого оператора SQL в IB.
← →
Sergey13 (2003-08-22 09:58) [12]2Duncan (22.08.03 09:40) [10]
1. Ведение лога логичнее было бы переложить на тригер. И быстрее и надежнее.
2.А не правильнее было бы qLogs.Execute вместо qLogs.Open?
3.Что то я сомневаюсь в такой организации транзакций. Более опытные IB-шники пусть меня поправят.
4.Вместо динамического создания запросов лучше использовать запросы с параметрами. И работают быстрее и читаются лучше.
← →
Johnmen (2003-08-22 10:08) [13]IBTransaction.StartTransaction;
qLogs.SQL.Clear;
qLogs.SQL.Add...;
qLogs.SQL.ExecSQL;
...
IBTransaction.Commit;
← →
Duncan (2003-08-22 12:12) [14]Попробуем последний вариант.
Спасибо за помощь!
Страницы: 1 вся ветка
Текущий архив: 2003.09.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c