Здравствуйте.
Пытаюсь перевести проект с Delphi7 на Lazarus 1.6.4
В программе ведется работа с базой на MS SQL
Есть вопрос про компонент TSQLTransaction
Он обязательно должен быть указан в TMSSQLConnection иначе ошибка.
А дальше возникает проблема.
Например используется две компоненты SQLQuery1 и SQLQuery2
в одной сделана выборка select компонент открыт SQLQuery1.Open
Пользователь работает с данными и вставляет на форме данные, которые должны вставляться по ID из текущей строки с помощью запроса во втором компоненте SQLQuery2.ExecSQL
В Delphi через ADO компоненты это работает без проблем.
Но почему-то в Lazarus Транзакция привязывается к соединению, и если выполнить Commit после SQLQuery2.ExecSQL то и выборка SQLQuery1.open закрывается.
Получается что есть два варианта
1. Копить данные на открытой транзакции и закрывать когда будут введены все. Но это глупо.
2. Пускать выборку и вставку данных через разные TMSSQLConnection. Это как-то странно.
Может не понимаю чего-то? Может есть нормальный способ работы с базой, а не эта чудесатая ерунда?
Добавлено спустя 16 часов 54 минуты 13 секунд:
Попробовал
1. Создал два SQLTransaction1 и SQLTransaction2
2. Указал каждому SQLQuery свой SQLTransaction
3. и указал в во всех четырех компонентах MSSQLConnection
4. В MSSQLConnection оставил ссылку на Transaction2
На первый взгляд , все заработало и в Profiler отлавливается ожидаемая картина действий.
НО в итоге данных в базе нет. Как будто Commit не делается.
Вот это колдунство я решительно не понимаю.
Как так, если в профайлере видно Commit то почему данные не вставляются и не апдейтятся?
P.S. Как временную меру сделал два MSSQLConnection один для select , другой для insert, update, delete.
С двумя коннекторами все работает как ожидаемо.
Сюр какой-то
Добавлено спустя 14 часов 59 минут 42 секунды:
Я так понимаю идей нет.
Это видимо идеологическая ошибка в реализации компонент.
Как передать баг разработчикам?