|
|
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Пытаюсь перевести проект с 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.11.2017, 11:24 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Господин Уэф!Например используется две компоненты SQLQuery1 и SQLQuery2 У них нельзя указывать транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 11:34 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
wadman, Можно но выскакивает ошибка. При попытке открыть или выполнить Query. посмотрел еще на всякий случай в саму компоненту TSQLTransacrion и увидел, что там тоже можно указать на MSSQLConnection т.е. не в MSSQLConnection указатель на TSQLTransacrion, а наоборот. Тогда можно для SQLQuery которые с визуальными гридами. Сделать один общий TSQLTransacrion1 А для всех остальных которые делают манипуляции с данными в режиме открыть-записать-подтвердить сделать TSQLTransacrion2 Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 11:59 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Господин Уэф!, Рано обрадовался. Сейчас вообще странность какая-то, вроде все запросы проходят нормально, в профайлере их видно. И commit-ы видно Но данных в базе нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 12:18 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Господин Уэф!, Может поискать сторонние компоненты для мускуля? http://wiki.freepascal.org/Lazarus_Database_Overview#Lazarus_and_MSSQL.2FSybase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 11:55 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
У Zeos тоже коннект=транзакция, если что ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 14:35 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
А причем тут вообще мускуль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 15:39 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
ЛюбезныйА причем тут вообще мускуль? Господин Уэф!В программе ведется работа с базой на MS SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 17:50 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
ДокЛюбезныйА причем тут вообще мускуль? Господин Уэф!В программе ведется работа с базой на MS SQL и как связан mysql и mssql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 18:20 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Господин Уэф!, в ms sql - - одна транзакция на коннект - в одном коннекте и транзакции может быть "недочитан" (открыт) одновременно только один запрос (query). если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 19:07 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
kdv> - в одном коннекте и транзакции может быть "недочитан" kdv> (открыт) одновременно только один запрос (query). Это давно не так. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 20:00 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinи как связан mysql и mssql? очевидно, что это я, не совсем ориентирующийся в вашем слэнге, назвал одно другим. Так что, никак. Расслабься :) Суть топика в другом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 23:11 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамkdv> - в одном коннекте и транзакции может быть "недочитан" kdv> (открыт) одновременно только один запрос (query). Это давно не так. MARS - см. что kdv написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 23:17 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev> MARS - см. что kdv написал Не понял твоего замечания. Ты про то, что на самом деле не одновременно, а "поочередно" или про что? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 02:34 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
kdvГосподин Уэф!, в ms sql - - одна транзакция на коннект - в одном коннекте и транзакции может быть "недочитан" (открыт) одновременно только один запрос (query). если с компонентами Х это не так, значит они врут, и втихаря открывают более 1 коннекта. или сразу фетчат весь запрос, как clientdataset. Это полностью не так. Сколько в Delphi7 делал утилит, всегда был один коннект на всё. 1. Это заметно даже по локальным временным таблицам #Tb, они видны только в рамках породившего коннекта. (в Lazarus-е сейчас чтобы по быстрому проблему решить, сделал два коннекта, на select и на всё остальное, и пришлось временные таблицы переделать на глобальные ##Tb ) 2. Да и в профайлере было бы видно несколько подключений, а их нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 05:07 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамЭто давно не так. ты про MARS? в каких компонентах это поддерживается? Господин Уэф!Это полностью не так. Сколько в Delphi7 делал утилит, всегда был один коннект на всё. раньше было абсолютно так, как я сказал, разве что с поддержкой MARS что-то изменилось. Дело в том, что исходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно одновременно ни стартовать две транзакции, ни открыть два запроса. Разделять транзакции и запросы в коннекте можно только если транзакции и запросы в коннекте как-то будут отдельно именоваться, или будут иметь на стороне клиента раздельные хэндлы, чтобы к ним можно было обращаться по очереди. Если для вас сказанное мной это абракадабра, то я вам советую почитать исходники компонент. К тому же, то что вы описываете, соответствует тому, что я сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 18:56 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
kdvисходно коннект MS SQL это "труба с текстовыми командами", в которой невозможно одновременно ни стартовать две транзакции, ни открыть два запроса. Точнее всё же будет сказать "нельзя открыть два безымянных курсора". Хотя и насчёт именованных я не уверен, но документация таки настаивает, что их - можно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 19:06 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovнельзя открыть два безымянных курсора А это потому, что эти два безымянных курсора имеют одинаковое имя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 19:17 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
kdv> ты про MARS? в каких компонентах это поддерживается? В Delphi - SDAC, FireDAC. Про ADO не знаю, но ADO.Net - поддерживает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 20:46 |
|
||
|
Lazarus как работать с TSQLTransaction ?
|
|||
|---|---|---|---|
|
#18+
Через два года наткнулся на этот свой вопрос. Закрываю. Для того чтобы "вручную" не заниматься открытием (begin) и подтверждением транзакции (commit) А так же чтобы работать на одном соединении. Нужно в параметры компоненты TMSSQLConnection внести параметр AutoCommit=true Видимо в Delphi в TADOConnection эта установка, по умолчанию сделана. Теперь в новых проектах, в компоненту или при старте программно сразу прописываю три параметра, и закрываю для себя эту тему. MSSQLServ.Params.Add('AutoCommit=true'); MSSQLServ.Params.Add('TextSize=16777216'); MSSQLServ.Params.Add('ApplicationName=имя программы для удобства отлавливания запросов профайлером'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 05:41 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39562146&tid=2038782]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 478ms |

| 0 / 0 |
