Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Lazarus как работать с TSQLTransaction ?  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 247
Здравствуйте.
Пытаюсь перевести проект с 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. Это как-то странно.
Может не понимаю чего-то? Может есть нормальный способ работы с базой, а не эта чудесатая ерунда?
29 ноя 17, 11:24    [20991078]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
Господин Уэф!
Например используется две компоненты SQLQuery1 и SQLQuery2

У них нельзя указывать транзакции?
29 ноя 17, 11:34    [20991109]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 247
wadman,

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

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

Спасибо.
29 ноя 17, 11:59    [20991232]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 247
Господин Уэф!,

Рано обрадовался.
Сейчас вообще странность какая-то, вроде все запросы проходят нормально, в профайлере их видно. И commit-ы видно
Но данных в базе нет.
29 ноя 17, 12:18    [20991313]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Док
Member

Откуда: Казань
Сообщений: 5231
Господин Уэф!,

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

http://wiki.freepascal.org/Lazarus_Database_Overview#Lazarus_and_MSSQL.2FSybase
30 ноя 17, 11:55    [20994826]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Василий №2
Guest
У Zeos тоже коннект=транзакция, если что
30 ноя 17, 14:35    [20995517]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Любезный
Member

Откуда:
Сообщений: 441
А причем тут вообще мускуль?
30 ноя 17, 15:39    [20995823]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Док
Member

Откуда: Казань
Сообщений: 5231
Любезный
А причем тут вообще мускуль?

Господин Уэф!
В программе ведется работа с базой на MS SQL
30 ноя 17, 17:50    [20996255]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2422
Док
Любезный
А причем тут вообще мускуль?

Господин Уэф!
В программе ведется работа с базой на MS SQL


и как связан mysql и mssql?
30 ноя 17, 18:20    [20996313]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26713
Господин Уэф!,

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

если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset.
30 ноя 17, 19:07    [20996402]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
kdv> - в одном коннекте и транзакции может быть "недочитан"
kdv> (открыт) одновременно только один запрос (query).

Это давно не так.

Posted via ActualForum NNTP Server 1.5

30 ноя 17, 20:00    [20996486]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Док
Member

Откуда: Казань
Сообщений: 5231
Tactical Nuclear Penguin
и как связан mysql и mssql?

очевидно, что это я, не совсем ориентирующийся в вашем слэнге, назвал одно другим. Так что, никак. Расслабься :)

Суть топика в другом
30 ноя 17, 23:11    [20996831]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9507
Гаджимурадов Рустам
kdv> - в одном коннекте и транзакции может быть "недочитан"
kdv> (открыт) одновременно только один запрос (query).

Это давно не так.

MARS - см. что kdv написал
30 ноя 17, 23:17    [20996854]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
Dmitry Arefiev> MARS - см. что kdv написал

Не понял твоего замечания. Ты про то, что на самом
деле не одновременно, а "поочередно" или про что?

Posted via ActualForum NNTP Server 1.5

1 дек 17, 02:34    [20997149]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 247
kdv
Господин Уэф!,

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

если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset.

Это полностью не так.
Сколько в Delphi7 делал утилит, всегда был один коннект на всё.
1. Это заметно даже по локальным временным таблицам #Tb, они видны только в рамках породившего коннекта. (в Lazarus-е сейчас чтобы по быстрому проблему решить, сделал два коннекта, на select и на всё остальное, и пришлось временные таблицы переделать на глобальные ##Tb )
2. Да и в профайлере было бы видно несколько подключений, а их нет.
1 дек 17, 05:07    [20997194]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 26713
Гаджимурадов Рустам
Это давно не так.

ты про MARS? в каких компонентах это поддерживается?

Господин Уэф!
Это полностью не так.
Сколько в Delphi7 делал утилит, всегда был один коннект на всё.

раньше было абсолютно так, как я сказал, разве что с поддержкой MARS что-то изменилось. Дело в том, что исходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно одновременно ни стартовать две транзакции, ни открыть два запроса.
Разделять транзакции и запросы в коннекте можно только если транзакции и запросы в коннекте как-то будут отдельно именоваться, или будут иметь на стороне клиента раздельные хэндлы, чтобы к ним можно было обращаться по очереди.
Если для вас сказанное мной это абракадабра, то я вам советую почитать исходники компонент.
К тому же, то что вы описываете, соответствует тому, что я сказал.
1 дек 17, 18:56    [20999376]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43939

kdv
исходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно
одновременно ни стартовать две транзакции, ни открыть два запроса.

Точнее всё же будет сказать "нельзя открыть два безымянных курсора". Хотя и насчёт
именованных я не уверен, но документация таки настаивает, что их - можно.

Posted via ActualForum NNTP Server 1.5

1 дек 17, 19:06    [20999391]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
Dimitry Sibiryakov
нельзя открыть два безымянных курсора

А это потому, что эти два безымянных курсора имеют одинаковое имя :)
1 дек 17, 19:17    [20999408]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus как работать с TSQLTransaction ?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
kdv> ты про MARS? в каких компонентах это поддерживается?

В Delphi - SDAC, FireDAC. Про ADO не знаю, но ADO.Net - поддерживает.

Posted via ActualForum NNTP Server 1.5

1 дек 17, 20:46    [20999566]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить