|
|
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Delphi 10.3 FireDac Firebird. Бросил на форму 4 компонента FDConnection FDTransation FDQuery и FDDriver. Параметры транзакции: write read_committed rec_version nowait Написал процедуру, которая редактирует в БД запись, сделал к ней select через FDQuery и передал параметры: function TForm1.EditEventsTest(var i, outError: Integer): Variant; begin with qEventEdit do begin if not Transaction.Active then Transaction.StartTransaction; try ParamByName('AOPERATION').Value := 1; ParamByName('ID').Value := '454A9F34-E0F2-4273-8BEC-ED11AFAC0BAE'; ParamByName('ID_DOCUMENT').Value := '9CF8A379-D83C-4B56-8721-0715896E3241'; ParamByName('KIND').Value := 2; ParamByName('TIME$EVENT').Value := Null; ParamByName('TIME$LAST_SEND').Value := Null; ParamByName('SEND$RESULT').Value := IntToStr(i);// 'test'; ParamByName('IS_SENDED').Value := 1; ParamByName('SEND$COUNTER').Value := 35; ParamByName('STATE').Value := 0; Open; Result := FieldByName('OUT_ID').Value; outError := FieldByName('OUT_ERROR').AsInteger; if (outError = 0) then begin Transaction.Commit; end else Transaction.Rollback; except Transaction.Rollback; end; end; end; Собственно, вопрос, почему первый commit вносит изменения в базу данных, а последующий вызов процедуры нет, ошибок при этом не возникает. Ошибки в запросе быть не может быть т.к. клиент на Delhi 7 всё прекрасно редактирует. Упростил приложение для того, что бы понять в чём проблема. У приложения одна единственная пишущая транзакция, чтения приложение не осуществляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:19 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotProСобственно, вопрос, почему первый commit вносит изменения в базу данных, а последующий вызов процедуры нет, ошибок при этом не возникает. Вариантов два: 1) OUT_ERROR возвращает не ноль, но ты об этом не знаешь из-за отсутствия диагностики. 2) Возникает исключение, но ты опять же об этом не узнаешь, поскольку молча подавил его в except. PS: Этот список не включает совсем уж идиотские варианты. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:23 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, код 100% рабочий, просто выкинул обработку out_Error + есть debug в делфи =) умеем проктикуем. Он встаёт на commit и всё, а в БД изменений нет. Но при первом запуске программы всё работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:27 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
где текст? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:30 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, текст чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:33 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
краткость - сестра! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:38 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotProкод 100% рабочий, просто выкинул обработку out_Error + есть debug в делфи =) умеем проктикуем. Значит остаются только совершенно идиотские варианты класса "вызываемая процедура не изменяет базу, поскольку в ней есть SUSPEND". Включай трассировку на стороне сервера и смотри что на самом деле происходит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:38 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotPro> Мимопроходящий, текст чего? ХП. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:47 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, судя по ответам, вы совсем не понимаете сути проблемы. По этому что бы вы дибила из меня не делали отвечаю... Сделал тестовые таблицы и 1 процедуру Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Затем в делфи sql запрос и процедуру Код: plsql 1. 2. 3. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Так вот если мы просто напишем в компоненте update TEST_TABLE TT set TT.NAME = :NAME where (TT.TID = 1); и затем вызовем метод ExecSql. Всё работает. А в моём случае с хранимкой работает лишь первый commit далее изменения не попадают в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:53 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotProсудя по ответам, вы совсем не понимаете сути проблемы. Я отлично понимаю суть проблемы, а вот ты, очевидно, не понял суть совета "включай серверную трассировку и смотри что на самом деле происходит". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 17:58 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotPro Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Проверь OUT_ERROR на нулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:06 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, признаюсь честно никогда не юзал, но в IBExpert-е почему-то пишет, не найдено сессий. Хотя запустил и своё приложение и написанное на Delphi 7, уж оно то точно должно было отобразиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:09 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
hvlad, Ошибка не в коде, а в методе Open... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:09 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotProпризнаюсь честно никогда не юзал, но в IBExpert-е почему-то пишет, не найдено сессий. Хотя запустил и своё приложение и написанное на Delphi 7, уж оно то точно должно было отобразиться. Ну вот и ответ: приложение меняет данные не в той базе, в которой ты ожидаешь изменений. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:10 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, эх... нет, скорее всего это моё неправильное использование трассировки. Я специально для вас, пока мы вели дисскусию создал тестовую таблицу с процедурой, если бы я коннектился к другой БД то ошибка вылетела Exists, а так признаки те же: Выполняешь через FireDac прямой запрос к таблице Update Test where Column и вызываешь ExecSQL. А если через процедуру, которая возвращает данные тобеж selet * from procedure() и вызываешь метод Open, изменения упадут лишь 1 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:15 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotPro> Open; А если вместо Open вызвать Execute (или как она там) ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:29 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotPro> А в моём случае с хранимкой работает лишь первый RackotPro> commit далее изменения не попадают в БД. Так ХП одну запись меняет или несколько? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:31 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, Execute ошибка, используйте метод Open. Там в хранимке запрос я кидал выше таблица из 2х полей, меняет одну запись. Код: plsql 1. 2. 3. Собственно, накидал IB компонентов код не меняя всё работает изменил в with ibquery do и всё работает. Но вопрос остаётся открытым почему FireDac коммитит изменения только 1 раз и всё при вызове в select ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:35 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, всё тему можно закрыть. Видимо свзяано это с каким-то оптимизаторов внутри компонента. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Обязательно добавьте Refresh. Всем спасибо все свободны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 18:44 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotProhvlad, Ошибка не в коде, а в методе Open...Так ты проверил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 19:58 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
RackotPro, Refresh ни к селу ни к городу. И явно ведь RefreshSQL тут не прописан. Дело в том, что у разных компонент при Open может делаться fetch первой записи, а может и не делаться, это зависит от настроек (свойств) конкретного датасета. До кучи - у FireDAC наверняка должен быть какой-то компонент "мониторинга" того, что он отсылает на сервер. Типа SQLMonitor или что-то вроде. И смотреть в первую очередь надо в нем. Потом - да, если что-то непонятное происходит, уже в трейсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 20:21 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
hvlad, Не исключено, что у отважного экспериментатора банально на хватало Close(). Ибо не факт, что FireDAC свои Query по завершению транзакций обязан закрывать.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 20:31 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov"вызываемая процедура не изменяет базу, поскольку в ней есть SUSPEND" RackotProвы совсем не понимаете сути проблемы. По этому что бы вы дибила из меня не делали отвечаю... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. suspend таки предугадан, хотя бы одну запись кто-нибудь попытался сфетчить? не надо писать suspend в процедуре меняющей что-либо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 20:31 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Vlad F, есть у делфи дебаг... можно посмотреть состояние транзакции после коммита. Сядь да потестируй вон выше код есть. Смысл вот этих бездумных отписок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 20:48 |
|
||
|
FireDac.Transaction помогите настроить
|
|||
|---|---|---|---|
|
#18+
Ivan_Pisarevsky, внимательность 100500 весь смысл как раз в suspende и в этой процедуре возвращается out_error, которому присвоенна 1-ца и сделанно, так для примера, что бы убедится, что там не null и т.п. В реальной жизни процедура возвращает не только out_error поэтому нужна была именно такая процедура. Которая пишет и возвращает какой либо результат, в следствии чего мы вынуждены использовать метод Open и т.д. т.п. всё то что было выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2018, 20:51 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=70&tid=2039336]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 303ms |

| 0 / 0 |
