Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как заставить БДЕ не откатываться?


Автор: han 25.9.2002, 19:16
Значит проблема в следующем...
Работаете вы с таблицами, удаляете записи, редактируете, а потом бац..............свет пропал..
Свет появился, включаете комп, запускаете программу, а там вся ваша работа - коту под хвост, БДЕ всё откатило назад.
Тоже  происходит и при снятии задачи.
Вот и возникает вопрос-как заставить БДЕ не откатываться, а сохранять изменения на лету?

Автор: Vit 25.9.2002, 21:21
Если ты работаешь из Дельфи/Билдера, то там в есть метод Flushbuffers или что-то подобное, ставишь его на событие AfterPost (и т.п.) и готово.

Автор: Medved 16.12.2002, 20:58
сommit transaction

Автор: Vit 17.12.2002, 00:37
Цитата(Pegas @ 16.12.2002, 03:58)
сommit transaction

Не поможет, дело не в транзакции а в кэшировании.

Автор: Medved 17.12.2002, 01:03
Если БД сетевая, то поможет.....

Автор: AntonSaburov 17.12.2002, 21:15
Цитата(Pegas @ 16.12.2002, 17:03)
Если БД сетевая, то поможет.....

А какая разница ? Все равно в файл пишем. База, судя по сообщению, явно файловая. Так что, IMHO, Vit предложил самое разумное решение - Flush.

Автор: Medved 18.12.2002, 02:33
Цитата

А какая разница ? Все равно в файл пишем. База, судя по сообщению, явно файловая. Так что, IMHO, Vit предложил самое разумное решение - Flush.


Во-первых, я согласен с тем что Vit предложил самое разумное решение;

Во-вторых, разница большая.... если мы используем промышленную базу данных (Oracle, MS SQL и др.) то с подтверждением транзации (commit) текущие изменения отразяться/сохраняться в этой БД.

Автор: AntonSaburov 18.12.2002, 02:46
Цитата(Pegas @ 17.12.2002, 18:33)
Во-первых, я согласен с тем что Vit предложил самое разумное решение;

Во-вторых, разница большая.... если мы используем промышленную базу данных (Oracle, MS SQL и др.) то с подтверждением транзации (commit) текущие изменения отразяться/сохраняться в этой БД.

SQL - он и в Африке SQL. И ему как раз BDE и всякие там Flush действительно по барабану. Здесь никаких возражений.

Тогда давай различать название "сетевая база" и "база под SQL".
"Сетевая база" - это те же файлы, только не у тебя, родного, на локальной машине, а где-то в сети. Что в принципе уже устаревает и лучше не использовать. Я вообще советую многим ставить локально Interbase и использовать сразу его. Потом проще переходить на многопользователскую базу. Места он занимает крайне мало, предоставляет кучу удобств, и прочая.

А "база под SQL" - это уже то, для чего commit transaction не помешает.
Но не всегда. Разбор таких случаев можно в виде отдельного "размышления о возможностях ..." - статья получится :)

Автор: Medved 18.12.2002, 03:20
Да, извеняюсь, я имел ввиду не сетевые базы данных, а промышленные...

З.Ы. "База под SQL" впервый раз такое слышу.... это называется "реляционная модель"


Автор: AntonSaburov 18.12.2002, 04:12
Цитата(Pegas @ 17.12.2002, 19:20)
Да, извеняюсь, я имел ввиду не сетевые базы данных, а промышленные...

З.Ы. "База под SQL" впервый раз такое слышу.... это называется "реляционная модель"

"База под SQL" в принципе выражение не стандартное. Просто сразу понятно, что всей базой управлет не клиент, а "солидная" программа :)

А вот "реляционная модель" к SQL имеет слабое отношение. В принципе и Access, Paradox и DBF тоже реляционные. "Реляционная" в изначалии своем подразумевает отношения на основе операций над множествами. Ну а SQL возник именно из этого математического аппарата.

Автор: Medved 18.12.2002, 04:20
Цитата

"База под SQL" в принципе выражение не стандартное. Просто сразу понятно, что всей базой управлет не клиент, а "солидная" программа


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

Цитата

А вот "реляционная модель" к SQL имеет слабое отношение. В принципе и Access, Paradox и DBF тоже реляционные. "Реляционная" в изначалии своем подразумевает отношения на основе операций над множествами. Ну а SQL возник именно из этого математического аппарата.


А вот здесь ты абсолютно не прав.... имеет самое прямое и непосредственное.... так как язык SQL является стандартом для реляционых баз данных.

Access, Paradox - это самые что ни на есть (а не "в принципе") реляционные базы данных. а DBF - это не реляционная база данных, а формат файла для хранения данных, реляционных баз, таких как FoxPro и Dbase.


Автор: Vit 18.12.2002, 05:06
Так, всё! Флейм пошёл, пора заканчивать

Автор: Oleg80([email protected]) 12.7.2004, 21:41
Проблема han'а появилась и у меня. Только база обновляется каждую секунду. База хорошо индексирована. Все индексы имееют параметр maintained=true.
При пропажи электричества, как я понимаю, не все мои индексы успевают обновиться. В результате при запуске
программы, после перебоев с электричеством, получаю ошибку "Index out of date".
Записи в базу добавляются так:
Table->AppendRecord(...);
Table->FlushBuffers(...);

Спасибо за внимание.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)