powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus как работать с TSQLTransaction ?
20 сообщений из 20, страница 1 из 1
Lazarus как работать с TSQLTransaction ?
    #39561129
Здравствуйте.
Пытаюсь перевести проект с Delphi7 на Lazarus 1.6.4
В программе ведется работа с базой на MS SQL

Есть вопрос про компонент TSQLTransaction
Он обязательно должен быть указан в TMSSQLConnection иначе ошибка.
А дальше возникает проблема.
Например используется две компоненты SQLQuery1 и SQLQuery2
в одной сделана выборка select компонент открыт SQLQuery1.Open данные отображаются в DBGrid
Пользователь работает с данными d DBGrid и вставляет в специальные поля на форме новые данные, которые должны вставляться по ID из текущей строки с помощью запроса во втором компоненте SQLQuery2.ExecSQL
В Delphi через ADO компоненты это работает без проблем.
Но почему-то в Lazarus Транзакция привязывается к соединению, и если выполнить Commit после SQLQuery2.ExecSQL то и выборка SQLQuery1.open закрывается.
Получается что есть два варианта
1. Копить данные на открытой транзакции и закрывать когда будут введены все. Но это глупо.
2. Пускать выборку и вставку данных через разные TMSSQLConnection. Это как-то странно.
Может не понимаю чего-то? Может есть нормальный способ работы с базой, а не эта чудесатая ерунда?
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39561134
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин Уэф!Например используется две компоненты SQLQuery1 и SQLQuery2
У них нельзя указывать транзакции?
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39561158
wadman,

Можно но выскакивает ошибка. При попытке открыть или выполнить Query.

посмотрел еще на всякий случай в саму компоненту TSQLTransacrion и увидел, что там тоже можно указать на MSSQLConnection
т.е. не в MSSQLConnection указатель на TSQLTransacrion, а наоборот.
Тогда можно для SQLQuery которые с визуальными гридами. Сделать один общий TSQLTransacrion1
А для всех остальных которые делают манипуляции с данными в режиме открыть-записать-подтвердить сделать TSQLTransacrion2

Спасибо.
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39561175
Господин Уэф!,

Рано обрадовался.
Сейчас вообще странность какая-то, вроде все запросы проходят нормально, в профайлере их видно. И commit-ы видно
Но данных в базе нет.
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39561858
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин Уэф!,

Может поискать сторонние компоненты для мускуля?

http://wiki.freepascal.org/Lazarus_Database_Overview#Lazarus_and_MSSQL.2FSybase
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39561965
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У Zeos тоже коннект=транзакция, если что
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562021
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причем тут вообще мускуль?
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562129
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйА причем тут вообще мускуль?
Господин Уэф!В программе ведется работа с базой на MS SQL
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562146
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокЛюбезныйА причем тут вообще мускуль?
Господин Уэф!В программе ведется работа с базой на MS SQL

и как связан mysql и mssql?
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562186
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин Уэф!,

в ms sql -
- одна транзакция на коннект
- в одном коннекте и транзакции может быть "недочитан" (открыт) одновременно только один запрос (query).

если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset.
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562211
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> - в одном коннекте и транзакции может быть "недочитан"
kdv> (открыт) одновременно только один запрос (query).

Это давно не так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562253
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguinи как связан mysql и mssql?
очевидно, что это я, не совсем ориентирующийся в вашем слэнге, назвал одно другим. Так что, никак. Расслабься :)

Суть топика в другом
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562256
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамkdv> - в одном коннекте и транзакции может быть "недочитан"
kdv> (открыт) одновременно только один запрос (query).

Это давно не так.
MARS - см. что kdv написал
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562282
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev> MARS - см. что kdv написал

Не понял твоего замечания. Ты про то, что на самом
деле не одновременно, а "поочередно" или про что?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562306
kdvГосподин Уэф!,

в ms sql -
- одна транзакция на коннект
- в одном коннекте и транзакции может быть "недочитан" (открыт) одновременно только один запрос (query).

если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset.
Это полностью не так.
Сколько в Delphi7 делал утилит, всегда был один коннект на всё.
1. Это заметно даже по локальным временным таблицам #Tb, они видны только в рамках породившего коннекта. (в Lazarus-е сейчас чтобы по быстрому проблему решить, сделал два коннекта, на select и на всё остальное, и пришлось временные таблицы переделать на глобальные ##Tb )
2. Да и в профайлере было бы видно несколько подключений, а их нет.
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562814
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЭто давно не так.
ты про MARS? в каких компонентах это поддерживается?

Господин Уэф!Это полностью не так.
Сколько в Delphi7 делал утилит, всегда был один коннект на всё.
раньше было абсолютно так, как я сказал, разве что с поддержкой MARS что-то изменилось. Дело в том, что исходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно одновременно ни стартовать две транзакции, ни открыть два запроса.
Разделять транзакции и запросы в коннекте можно только если транзакции и запросы в коннекте как-то будут отдельно именоваться, или будут иметь на стороне клиента раздельные хэндлы, чтобы к ним можно было обращаться по очереди.
Если для вас сказанное мной это абракадабра, то я вам советую почитать исходники компонент.
К тому же, то что вы описываете, соответствует тому, что я сказал.
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562817
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvисходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно
одновременно ни стартовать две транзакции, ни открыть два запроса.

Точнее всё же будет сказать "нельзя открыть два безымянных курсора". Хотя и насчёт
именованных я не уверен, но документация таки настаивает, что их - можно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562824
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovнельзя открыть два безымянных курсора
А это потому, что эти два безымянных курсора имеют одинаковое имя :)
...
Рейтинг: 0 / 0
Lazarus как работать с TSQLTransaction ?
    #39562845
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> ты про MARS? в каких компонентах это поддерживается?

В Delphi - SDAC, FireDAC. Про ADO не знаю, но ADO.Net - поддерживает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Lazarus как работать с TSQLTransaction ?
    #39901599
Через два года наткнулся на этот свой вопрос.
Закрываю.

Для того чтобы "вручную" не заниматься открытием (begin) и подтверждением транзакции (commit)
А так же чтобы работать на одном соединении.
Нужно в параметры компоненты TMSSQLConnection внести параметр AutoCommit=true
Видимо в Delphi в TADOConnection эта установка, по умолчанию сделана.

Теперь в новых проектах, в компоненту или при старте программно сразу прописываю три параметра, и закрываю для себя эту тему.

MSSQLServ.Params.Add('AutoCommit=true');
MSSQLServ.Params.Add('TextSize=16777216');
MSSQLServ.Params.Add('ApplicationName=имя программы для удобства отлавливания запросов профайлером');
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus как работать с TSQLTransaction ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]