| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Где-то я не подтверждаю транзакцию... |
| Автор: ksili 2.4.2008, 13:15 |
| У меня в приложении таблица открывается в DBGrid через pFIBDatabase, pFIBDataSet, DataSource. Сделано так, что записи можно добавлять прямо в таблице. Но почему-то, после того, как добавлю несколько записей (или одну), их нельзя ни удалить, ни отредактировать. Точнее в гриде это всё можно делать, но реально, в базе, они не изменяются. А вот после того, как переоткрою набор данных, все нормально - можно и удалить, и изменить. Где я что недописал? Всё выглядит так, как будто все изменения подтверждаются только по закрытию датасета. Хотя в свойствах AutoCommit = true |
| Автор: Esperito 2.4.2008, 18:20 |
| Желательно подключить pFIBTransaction к pFIBDataSet. И вместо AutoCommit делать при окончании работы pFIBTransaction.Commit (или, по условию, pFIBTransaction.Rollback). |
| Автор: ksili 3.4.2008, 04:26 |
| Не, ну pFIBTransaction-то конечно есть (даже два). Без него бы вообще не работало. Попробую без AutoCommit |
| Автор: TObject 3.4.2008, 11:45 | ||||
Не очень хороший подход. Никогда так не делал. Обычно добавление и редактирование делаю в отдельной форме, где по кнопке (Ок, Сохранить, Записать) происходит чтото типа такого:
заодно всякие проверки можно проводить еще на клиенте. |
| Автор: ksili 3.4.2008, 12:09 |
Это не очень хороший подход со стороны программиста, а вот со стороны пользователя, которому эти таблицы редактировать, как раз самый замечательный подход. |
| Автор: TObject 3.4.2008, 12:59 | ||
Ну как говорится на вкус и цвет, денег нет. На этот счет можно долго спорить. Но скажи в чем удобство прямого добавления если например в добавляемую запись нужно вставить несколько данных из справочников, опять же нужно раскошелится на дополнительный код, лепить кпопочки в гриде по определенным столбцам и т.д. |
| Автор: ksili 3.4.2008, 13:01 |
| Никаких кнопочек лепить не надо. Если настроены lookup-поля, выпадающие списки сами, где надо, появляются. |
| Автор: Akella 3.4.2008, 13:05 |
| А параметры пишущей транзакции какие? Добавлено через 27 секунд Народ, вы отдаляетесь от темы |
| Автор: ksili 3.4.2008, 13:40 | ||||
| У pFIBDatabase и pFIBDataSet есть свойства DefaultTransaction и DefaultUpdateTransaction. Все DefaultTransaction у меня установлены в Transaction1 (один компонент), все DefaultUpdateTransaction установлены в Transaction2 (тоже один компонент). У DefaultTransaction все свойства по-умолчанию. У DefaultUpdateTransaction оказывется тоже! а я думал, чо выставлял отдельные параметры По-умолчанию это:
|
| Автор: Deniz 4.4.2008, 05:08 | ||
У читающей должно быть:
|
| Автор: Akella 4.4.2008, 12:35 | ||||
Сделай, как Deniz советует. в параметры засунь для читающей транзакции
для пишущей:
|
| Автор: ksili 4.4.2008, 12:42 |
| Попробую. Но вот сейчас я заметил, что параметры добавленные в дизайнере в TRParams (оно типа TStrings), не сохраняются! Закрыл проект - открыл проект ---> TRParams = NULL. Их нужно только в run-time добавлять? Кто-нибудь сталкивался с таким? |
| Автор: Deniz 4.4.2008, 14:54 | ||
Akella, для пишущей короткой лучше:
никогда такого не было, как прописал, так и сохраняются. |
| Автор: ksili 7.4.2008, 07:53 | ||||||
С этим разобрался - в том конкретном случае надо было смотреть InsertSQL, а не UpdateSQL. Запросы вроде генерируются правильно, но смущает один момент. В документации FIBPlus (Developers Guide) указаны примерно такие запросы
У меня генерируются такие:
Хотя в настройках датасета я указал
Непонятка с именами параметров: в документации оно такое же как поле, но с двоеточием, в реальности приписывается ?NEW_ или ?OLD_, хотя в настройках указаны совершенно конкретные имена |