![]() |
|
![]() ![]() ![]() |
|
olek68 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Я хочу использовать механизм кэшированных изменений, но пока не знаю как. И надеюсь, что Вам не будет трудно подсказать мне как это сделать.
Пользователю удобнее вносить изменения в самом гриде главной формы. Не открывая формочек для редактирования данных. И тут вот такие проблемки. Ложу на форму IBDatabase1, IBTransaction1, IBQuery1, IBUpdateSQL1, DataSource1 и DBGrid1. Соединяю их, так что вижу нужные данные в Гриде.Но, для того, чтобы редактировать данные изменяю свойство: IBQuery1.CachedUpdates:= true; IBQuery1.UpdateObject:=IBUpdateSQL1; в IBUpdateSQL1.ModifySQL пишу: update My_table set ID = :ID where ID = :OLD_ID В гриде могу изменять но изменения не прописываются в базу. Они зависают в кеше. Пробую: IBQuery1.ApplyUpdates; или IBQuery1.Database.ApplyUpdates([IBQuery1]); но в результате получаю ошибку. Покажите правильный пример обработки кешированных изменений. ![]() |
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Это очень сложная и практически нерешаемая проблема. По крайней мере пока ты не напишешь текст ошибки ![]() Я для этого дела юзаю датасет с включенным CachedUpdates. Но там надо с транзакция разобраться, что бы не висела длинная пишущая. Или можно использовать фибы - там в датасете можно 2 транзакции указать - читающую и пишущую. |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
некорректный запрос на обновление.
Если память не изменяет, в IBUpdateSQL1 есть возможность автоматически построить запросы на insert/update/delete. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
olek68 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
а мне все записи обновлять и не надо. (пример условный) а практически только поле "количество". Делаю кнопочку:
удобнее наверное использовать IBQuery1AfterPost, но пока кнопка. получаю ответ: raised exception class EIBClientError with message 'Update Failed'. Покажите как правильно. Это сообщение отредактировал(а) olek68 - 14.2.2011, 08:01 |
||||
|
|||||
olek68 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Transaction Properties:
Read_Write Table Stability (write consistency) AutoStopAction: saRollback DefaultAction: TACommit |
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
olek68, в общем проверил я у себя такую связку - вполне работает.
Я выставлял IBQuery1.CachedUpdates:= true; IBQuery1.UpdateObject:=IBUpdateSQL1; уже в самой среде, а не программно. ModifySQL тоже в самой среде я генерил самим IBUpdateSQL1 (правой клавишей - эдитор). Все работает, но не вижу в этом смысла. Легче использовать TIBDataSet - там все в одном. А если хочется развести все на 2 транзакции читающую и пишущую, то надо использовать не TIBUpdateSQL, а TIBSQL там можно указать другую транзакцию. Вот почитай - ссылка. |
|||
|
||||
Deniz |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Добавлено через 1 минуту и 39 секунд Хотя по ссылке superVad все понятно рассказано и именование параметров транзакции немного другие -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
olek68 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Да я тоже выставлял все в самой среде. За исключением коннекта с базой в IBDatabase,
но при запуске программы данные открываются в гриде и можно редактировать но не коммитить. Изначально делал все на IBDataSet но тоже не пошло… Хм… Может проблема в самой базе? Или мне нужно заполнить все параметры IBUpdateSQL. Пока положил только Modify. Сделаю тестовую базу и попробую заново. Если не пойдет вышлю исходник. Тыкнёте, где не так? ![]() |
|||
|
||||
olek68 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.8.2010 Репутация: нет Всего: нет |
Большое спасибо всем, кто пытался помочь. Причину нашел.
Проблема была в некорректном запросе. На простой табличке все пошло на ура. ![]() Это сообщение отредактировал(а) olek68 - 15.2.2011, 09:17 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |