Вопрос по тракзакциям и не только
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Вопрос по тракзакциям и не только
Вот такой есть вопрос по транзакциям и не только по ним...
При работе с Paradox через BDE проблем подобного рода, конечно не было, и вообще транзакции применял только если шла запись в несколько таблиц, и нужно было гарантировать что запись прошла во все или вообще отказаться... В РСУБД (в частности FB) несколько другая идеология транзакций, поэтому сразу не очень всё понятно. Доку я конечно внимательно почитаю, просто, если не лень, кратко ответьте. Вот есть у меня DataSet (уже под FB). Отвечает за отображение данных одной из основных таблиц. Вернее в DataSet запрос SelectSQL выбирает данные не из одной этой таблицы, а из туевой хучи таблиц цепляет нужные поля. В принципе непосредственно править этот датасет вставляя данные, или удаляя. или изменяя напрямую я не хочу. Идея в том, чтобы при определённом действии с визуальным отображением DataSet'а выполнять некую процедуру, которая корректно проверит что и как сделать, и путём выполнения запроса/запросов это сделает.
1. Правильно ли я понимаю, что в этом случае мне не нужно задавать для DataSet никаких свойств кроме SelectSQL или вообще использовать в этом случае не DataSet а Query?
2. Если мой DataSet привязан к определённой транзакции, то мне обязательно другие запросы, изменяющие таблицы, из которых поля цепляются запросом, выполнять в рамках ЭТОЙ ЖЕ транзакции, или можно создать отдельную?
Извините за вопросы, просто пока читаю-читаю, и по некоторым
вопросам еще "каша в голове"... Но я исправлюсь. Со временем
При работе с Paradox через BDE проблем подобного рода, конечно не было, и вообще транзакции применял только если шла запись в несколько таблиц, и нужно было гарантировать что запись прошла во все или вообще отказаться... В РСУБД (в частности FB) несколько другая идеология транзакций, поэтому сразу не очень всё понятно. Доку я конечно внимательно почитаю, просто, если не лень, кратко ответьте. Вот есть у меня DataSet (уже под FB). Отвечает за отображение данных одной из основных таблиц. Вернее в DataSet запрос SelectSQL выбирает данные не из одной этой таблицы, а из туевой хучи таблиц цепляет нужные поля. В принципе непосредственно править этот датасет вставляя данные, или удаляя. или изменяя напрямую я не хочу. Идея в том, чтобы при определённом действии с визуальным отображением DataSet'а выполнять некую процедуру, которая корректно проверит что и как сделать, и путём выполнения запроса/запросов это сделает.
1. Правильно ли я понимаю, что в этом случае мне не нужно задавать для DataSet никаких свойств кроме SelectSQL или вообще использовать в этом случае не DataSet а Query?
2. Если мой DataSet привязан к определённой транзакции, то мне обязательно другие запросы, изменяющие таблицы, из которых поля цепляются запросом, выполнять в рамках ЭТОЙ ЖЕ транзакции, или можно создать отдельную?
Извините за вопросы, просто пока читаю-читаю, и по некоторым
вопросам еще "каша в голове"... Но я исправлюсь. Со временем
Re: Вопрос по тракзакциям и не только
А какие компоненты пользуются?Kotъ-Begemotъ писал(а): 1. Правильно ли я понимаю, что в этом случае мне не нужно задавать для DataSet никаких свойств кроме SelectSQL или вообще использовать в этом случае не DataSet а Query?
2. Если мой DataSet привязан к определённой транзакции, то мне обязательно другие запросы, изменяющие таблицы, из которых поля цепляются запросом, выполнять в рамках ЭТОЙ ЖЕ транзакции, или можно создать отдельную?
ФИБ+ позволяет при джойнах только одну таблицу редактировать - если надо больше, то это отдельный TpFIBQuery, рефреш связанных таблиц - твои заботы
изменения по одной записи - ИМХО делаются в одной транзакции, дабы либо принять, либо откатить все
Для чения-записи в ФИБ+ возможно использовать разные транзакции, с РАЗНЫМ уровнем изолированности
Re: Вопрос по тракзакциям и не только
Даже желательно отдельную. Потому как Commit транзакции закроет твой датасет.Kotъ-Begemotъ писал(а):2. Если мой DataSet привязан к определённой транзакции, то мне обязательно другие запросы, изменяющие таблицы, из которых поля цепляются запросом, выполнять в рамках ЭТОЙ ЖЕ транзакции, или можно создать отдельную?
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
Ага, то есть "наплодив" отдельных транзакций в рамках которых я планирую выполнять запросы обновляющие (добавляющие) данные я не буду выглядеть лохом? А если Dataset использует update или insert запрос, то закрытие по Commit - это я бы сказал удобно...WildSery писал(а):Даже желательно отдельную. Потому как Commit транзакции закроет твой датасет.Kotъ-Begemotъ писал(а):2. Если мой DataSet привязан к определённой транзакции, то мне обязательно другие запросы, изменяющие таблицы, из которых поля цепляются запросом, выполнять в рамках ЭТОЙ ЖЕ транзакции, или можно создать отдельную?
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
Да, думаю FIBPlus будет использоваться. Пока это представляется наиболее целесообразным, так как и связь с разработчиками "живая" - можно пообщаться всегда, да и компоненты временем проверены...stix-s писал(а): А какие компоненты пользуются?
ФИБ+ позволяет при джойнах только одну таблицу редактировать - если надо больше, то это отдельный TpFIBQuery, рефреш связанных таблиц - твои заботы
изменения по одной записи - ИМХО делаются в одной транзакции, дабы либо принять, либо откатить все
Для чения-записи в ФИБ+ возможно использовать разные транзакции, с РАЗНЫМ уровнем изолированности
Re: Вопрос по тракзакциям и не только
Зачем? Он должен постоянно данные показывать. Обновил одну строку - он пусть и перечитает одну строку, а не весь датасет заново.Kotъ-Begemotъ писал(а):А если Dataset использует update или insert запрос, то закрытие по Commit - это я бы сказал удобно...
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
А если обновил/и другие пользователи, и неизвестно какое количество полей и записей? Работа-то многопользовательская...WildSery писал(а):Зачем? Он должен постоянно данные показывать. Обновил одну строку - он пусть и перечитает одну строку, а не весь датасет заново.Kotъ-Begemotъ писал(а):А если Dataset использует update или insert запрос, то закрытие по Commit - это я бы сказал удобно...
Re: Вопрос по тракзакциям и не только
По моему этот вопрос и от этого же автора я уже виделKotъ-Begemotъ писал(а):
А если обновил/и другие пользователи, и неизвестно какое количество полей и записей? Работа-то многопользовательская...
ответы были: (события, таймер, кнопка или их комбинации)
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
Дык поэтому и говорю... То есть в моём случае в DataSet отображающем данные кроме SelectSQL получается другие запросы и не нужны вовсе? UpdateSQL, DeleteSQL, RefreshSQL, InsertSQL раз я буду все данные операции с помощью отдельных DataSet (Query) делать в индивидуальных "коротких" транзакциях?stix-s писал(а):По моему этот вопрос и от этого же автора я уже видел
ответы были: (события, таймер, кнопка или их комбинации)
Re: Вопрос по тракзакциям и не только
если только смотреть, то нет, но......., зависит от параметров транзакцииKotъ-Begemotъ писал(а): Дык поэтому и говорю... То есть в моём случае в DataSet отображающем данные кроме SelectSQL получается другие запросы и не нужны вовсе? UpdateSQL, DeleteSQL, RefreshSQL, InsertSQL раз я буду все данные операции с помощью отдельных DataSet (Query) делать в индивидуальных "коротких" транзакциях?
если речь идет об обновлениях в нескольких таблицах одновременно, то я ИМХО другого выхода, как использовать TpFIBQuery я не вижу, но в отдельной, короткой пишущей транзакцииделать в индивидуальных "коротких" транзакциях?
откровенно говоря, я не совсем понял вопрос
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
Однако ответил в нужную сторону Да, обновлять возможно придётся несколько таблиц, так как запрос с "просматривающем" DataSet тянет поля из нескольких таблиц. А датее в зависимости от действия пользователя будет обновлена основная и(или) связанные таблицы с помощью отдельных Query (upate, insert, delete) помещённых в отдельную транзакцию, сделанную максимально короткой - Старт, ExecSQL запроса, обработка ошибок, commit или возможно rollback в случае ошибок.stix-s писал(а):если речь идет об обновлениях в нескольких таблицах одновременно, то я ИМХО другого выхода, как использовать TpFIBQuery я не вижу, но в отдельной, короткой пишущей транзакции
откровенно говоря, я не совсем понял вопрос
Про параметры транзакций пока читАю вовсю. Вроде какое-то понимание уже потихоньку приходит...
Re: Вопрос по тракзакциям и не только
загляни сюда http://forum.ibase.ru/phpBB2/viewtopic. ... 4&start=80Kotъ-Begemotъ писал(а): Про параметры транзакций пока читАю вовсю. Вроде какое-то понимание уже потихоньку приходит...
основная тема, может и не связана напрямую с транзакциями, но мнение Мерлина по поводу Update стоит иметь ввиду
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Вопрос по тракзакциям и не только
(Не)Позволяет редактировать разработчик. В ФИБ+ можно в UpdateSQL написать не классику жанра UPDATE Table ..... а EXECUTE STATEMENT (правильно..EXECUTE PROCEDURE) Procedure..., в которой делать UPDATE по нескольким таблицам, без отдельной TpFIBQuery и последующих забот с рефрешемstix-s писал(а): ФИБ+ позволяет при джойнах только одну таблицу редактировать - если надо больше, то это отдельный TpFIBQuery, рефреш связанных таблиц - твои заботы
Последний раз редактировалось Monk 03 сен 2007, 11:32, всего редактировалось 2 раза.
Re: Вопрос по тракзакциям и не только
Какой ещё EXECUTE STATEMENT? Забудьте это слово.Monk писал(а):аписать не классику жанра UPDATE Table ..... а EXECUTE STATEMENT Procedure...
Execute Block, или Execute Procedure.
Re: Вопрос по тракзакциям и не только
Да, ошибся. Незнаю вот только с какого.. переклинило. Наверное понедельник. Конечно же EXECUTE PROCEDUREWildSery писал(а):Какой ещё EXECUTE STATEMENT? Забудьте это слово.Monk писал(а):аписать не классику жанра UPDATE Table ..... а EXECUTE STATEMENT Procedure...
Execute Block, или Execute Procedure.
Re: Вопрос по тракзакциям и не только
ИМХО EXECUTE ....... - изврат для TpFIBDatasetMonk писал(а): (Не)Позволяет редактировать разработчик. В ФИБ+ можно в UpdateSQL написать не классику жанра UPDATE Table ..... а EXECUTE STATEMENT (правильно..EXECUTE PROCEDURE) Procedure..., в которой делать UPDATE по нескольким таблицам, без отдельной TpFIBQuery и последующих забот с рефрешем
Забот с рефрешем собственно никаких, главное верный запрос для рефреша и своевременный его вызов
Re: Вопрос по тракзакциям и не только
я и написал, что вовсе не обязательно так делать, можно и TpFibDatasetом обойтись для редактирования нескольких таблиц одновременно. Например, есть грид, куда выводится сводная, полученная из нескольких таблиц (один TpFibDataSet), при редактировании данных в ней (ну если все на Д-товарных компонентах делать), можно довольно легко сделать сохранение изменения информации в редактируемой таблице пользуясь только одним компонентом TpFibDataSet, вынеся логику на сервер в процедуру.stix-s писал(а): ФИБ+ позволяет при джойнах только одну таблицу редактировать - если надо больше, то это отдельный TpFIBQuery
А в чем изврат?stix-s писал(а): ИМХО EXECUTE ....... - изврат для TpFIBDataset