Вопрос немного не в тот форум, но что-то sql.ru недоступен.
Лазарус, компоненты:
IBConnection1: TIBConnection;
q: TSQLQuery;
trn1: TSQLTransaction;
Параметры транзакции:
trn1.Params.Clear;
trn1.Params.Add('write');
trn1.Params.Add('consistency');
trn1.Params.Add('nowait');
Запрос (упрощенный, для изучения ситуации):
q.SQL.Clear;
q.SQL.Add('UPDATE s78');
q.SQL.Add('SET s78Main=''QQQ'' ');
q.SQL.Add('WHERE s78Num=18');
Запускаю программу, оставляю транзакцию незавершенной.
В другом экземпляре программы пишу WHERE s78Num=20
и при попытке выполнения запроса получаю:
- lock conflict on wait transaction
- Acqure lock for relation (s78) failed
Задача - лочить именно отдельные записи таблицы, а не всю запись.
Добавлено спустя 59 минут 19 секунд:
Извиняюсь, ошибся в копипасте. В другом экземпляре s78Num=20 - т.е. меняю другую запись. Транзакции по-идее, не должны мешать друг другу.