Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

Сохранение всех изменений в таблице и их отмена.   Найти похожие ветки 

 
Weare   (2003-04-04 13:34) [0]

Доброго дня, уважаемые мастера.

У меня проблема такого рода. Вот я открыл таблицу и изменяю там какую-то запись, и при переходе на другую запись или на новую происходит сохранения измененной записи. Подскажите, плиз, как правильней реализовать отмену этих сохранений, т.е. чтобы происходили изменения только при определенном действии.

Слышал я что-то про свойство CashedUpdates, но не знаю как с ним бороться, из хелпа ничего не понял :(

Прошу прощения за такой вот ламерский вопросик :)
Спасибо.


 
zacho   (2003-04-04 13:42) [1]

А чего там понимать ? Делаешь CachedUpdates:=true; Хочешь подтвердить изменения - DataSet.ApplyUpdates, отменить - DataSet.CancelUpdates.
Еще можешь посмотреть на TDataBase.StartTransaction, Commit, Rollback.


 
Mike Kouzmine   (2003-04-04 13:56) [2]

Onbeforescroll, BeforeInsert
if not t.state in [dsBrowse] then t.Cancel;


 
Weare   (2003-04-04 16:18) [3]

Спасибо, но тогда как связано индексирование таблицы со свойством

CashedUpdates. У меня ругается, если я его ставлю в True: "Table is not indexed".


 
NickBat   (2003-04-04 16:22) [4]

Не заню кто как, а я, если даю пользователю изменять данные, то заменяю стандартные средства навигации своими. И если пользователь изменил данные, то ему чтобы пойти дальше надо или сохранить, или отменить изменения.


 
Mike Kouzmine   (2003-04-04 16:23) [5]

А какие стандартные средства навигации?


 
NickBat   (2003-04-04 16:26) [6]

DBNavigatorBar к примеру.
Я имел ввиду, что если вывожу таблицу, то только для просмотра. Если пользователь, что-то правит, то ему сначала надо сохранить свои исправления.


 
Mike Kouzmine   (2003-04-04 16:28) [7]

Я навигатор не использую вообще.
А если ему не надо сохранять? Злой Вы.


 
Mike Kouzmine   (2003-04-04 16:29) [8]

Шутка.


 
NickBat   (2003-04-04 16:31) [9]

>Mike Kouzmine © (04.04.03 16:28)
>Я навигатор не использую вообще.
>А если ему не надо сохранять? Злой Вы.


Ну или отменить :)))


 
Weare   (2003-04-04 16:36) [10]

Все это хорошо, а если надо менять несколько записей, а уж потом думать сохранять это или нет.

Кстати, спасибо zacho - все работает. Вот только пришлось проиндексировать все таблицы. Никак не могу понять как связано это свойство CashedUpdates c индексацией, может кто знает???


 
NickBat   (2003-04-04 16:55) [11]

>Weare
Приведите пример когда пользователю надо менять ОДНОВРЕМЕННО несколько записей в ОДНОЙ таблице.


 
Dred2k   (2003-04-04 17:02) [12]


> Weare © (04.04.03 16:18)
> Спасибо, но тогда как связано индексирование таблицы со
> свойством
>
> CashedUpdates. У меня ругается, если я его ставлю в True:
> "Table is not indexed".


Пробовать не охота, но предположу, что связано с отсутствием первичного ключа. Попробуй. У меня великолепно пашет, но везде в таблицах есть первичный ключ (суррогатный ID или ROW, как правило). Вот такая версия...


 
Mike Kouzmine   (2003-04-04 17:05) [13]

Можешь попробовать использовать транзакции. Иногда помогает.


 
Weare   (2003-04-04 17:16) [14]


>to Dred2k
> Пробовать не охота, но предположу, что связано с отсутствием
> первичного ключа. Попробуй. У меня великолепно пашет, но
> везде в таблицах есть первичный ключ (суррогатный ID или
> ROW, как правило). Вот такая версия...

Да это как раз из-за первичного ключа, но при чем тут он?


>to NickBat © (04.04.03 16:55)
> Приведите пример когда пользователю надо менять ОДНОВРЕМЕННО
> несколько записей в ОДНОЙ таблице.

Мне не надо ОДНОВРЕМЕННО менять. Дело тут вот в чем, пользователь открыл какой-то документ, например "приход товара" (это из моей задачи). Делает там определенные изменения, и потом видит, что где-то ошибся и ему не надо, чтобы сделаные изменения вступали в силу, так он этот документ просто не сохраняет.


Спасибо всем, у меня все уже работает (отдельное спасибо zahco), мне все-таки не понятно как связаны CashedUpdates и индексирование таблицы.


 
NickBat   (2003-04-04 17:21) [15]

>изменения, и потом видит, что где-то ошибся и ему не надо,
>чтобы сделаные изменения вступали в силу, так он этот документ
>просто не сохраняет.

Ну так вперед и не сохраняй на здоровье! При чем тут несколько записей, если он открыл документ "приход товара"? Документ-то один и запись, как я понимаю, одна?

А вообще-то для этого есть транзакции.


 
Dred2k   (2003-04-04 17:31) [16]


> Weare © (04.04.03 17:16)


> Да это как раз из-за первичного ключа, но при чем тут он?

...

> мне все-таки не понятно как связаны CashedUpdates и индексирование
> таблицы.


Судя по твоему письму, понятно.
;)
А насчет "при чем ключ" - подозвреваю, что нужно для внутренней реализации BDE. И еще. Механизм транзаций и кэшедапдейтов для парадокса, скорее всего, один и тот же (или похож).
Вот выдержка из хелпа bde32.hlp по транзакциям

To perform transactions on a Paradox table, a valid index must exist. Data cannot be rolled back on Paradox tables lacking an index.

Таким образом, нужен нормальный индекс. А первичный ключ в общем случае - это уже перебор (хотя тоже индекс). ;)
А вообще, поищи в сети - наверняка есть статьи на этот счет. Кажется, видел на Королевстве Дельфи ( http://www.delphikingdom.com), но могу ошибиться...
Яндекс нам поможет.


 
Weare   (2003-04-04 17:36) [17]


>to NickBat © (04.04.03 17:21)


> Документ-то один и запись, как я понимаю, одна?


Нет, если документ один, то это не значит, что там запись одна. К примеру, в этом документе могут "приехать" и 20 розеток, и 15 выключателей, и еще чего-нибудь.


 
MsGuns   (2003-04-04 19:42) [18]

>Weare © (04.04.03 17:36)

NickBat прав и я подписываюсь под каждым его словом начиная от запрета юзеру свободно куролесить по всему гриду и кончая поддержкой нормальных транзакций.
В случае же "отката" всех изменений, к примеру, в фактуре накладной, одними отменами изменений в документе не обойдешься, тем более что парадокс в принципе не поддерживает транзакции (вплоть до 8-й версии). Хотя бы потому, что изменение кол-ва в любой строке накладной может сразу "отражаться" в нескольких совершенно других таблицах, с которыми юзер в данный момент вроде бы и не работает. Например, в таблице остатков, таблице заказанного товара и т.д. Если делать как в 1С, т.е. "откатывать" весь документ, а потом его править и соотв-но "закатывать", то отмена действий во время правки как бы теряет свою актуальность. Если же реализовать нормальную (ИМХО) интерактивную многопользовательскую модель (Валя ввела, а Таня сразу увидела), то во-первых, надо дать Вале "кнопулю" типа "Сохранить изменения", а во-вторых кинуть парадокс к чертям собачим и перейти на нормальную КССУБД.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
1-76937
Mike_
2003-04-15 09:55
2003.04.24
Exel через OLE. Как добраться до второго листа книги?


9-76738
Shipilin Sergey
2002-11-22 21:18
2003.04.24
Создание стратегии!


3-76824
PavelOKES
2003-04-07 08:43
2003.04.24
Запрос из TQuery


14-77158
ProfiUgl
2003-04-08 15:38
2003.04.24
Посоветуйте компоненту для создания ShareWare приложения


6-77043
Serhij H.
2003-02-27 23:01
2003.04.24
Proxy для WebBrowser





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский