Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Непонятности с компонентом Table |
Автор: Нитонисе 20.1.2010, 14:53 |
Хочу изменить значения в базе данных. Набо из 3000 записей. Программно по всем им прохожу, меняя значение одного поля. Но размер вбайтах файла базы данных *.db не меняется, хотя и при выполнении программы и впроцессе проектирования - база данных уже представлена в измененном виде. Однако перезагружаю компьютер - и база данных в старом своем состоянии. Такое ощущения что эти изменения хранятся в каком-то кэше, и нужно применить что-то типа ApplyUpdates. В чем тут дело? Похожая история с копированием записей из одной базы в другую. Вроде бы все скопировалось, однако размеры как исходной базы данных, так и той, куда копировал - остались без изменений, хотя в процессе выполнения программы все отображается нормально, до перезагрузки компьютера. |
Автор: Нитонисе 20.1.2010, 15:33 | ||||
Называется-то она так, но не работает
Выдает ошибку - T2: Not in cached update mode. T2 - это компонент класса TTable. |
Автор: azesmcar 20.1.2010, 15:45 |
Нитонисе вызывай ApplyUpdates() после функции Post() и ApplyUpdates стоит вызывать если CashedUpdates стоит. |
Автор: Нитонисе 20.1.2010, 16:13 | ||
После Post() пишет ошибку - Database not in insert or edit mode. CashedUpdates на это никак не влияет. Да и вообще - эту опцию нужно ставить если надо кэшировать данные. А мне-то этого не надо. Мне надо сразу записывать. Потому CashedUpdates у меня всегда false. Но база почему-то не обновляется после прямой записи. |
Автор: azesmcar 20.1.2010, 16:15 | ||
Так не работает? |
Автор: Нитонисе 20.1.2010, 16:50 |
Ох и непонятный это компонент. Заменил на инсерт - сработало. Но мне нужно именно аппенд. Заменил обратно - и снова сработало. Что стало причиной - неясно, но проблема пока не проявляется. |
Автор: azesmcar 20.1.2010, 17:09 |
Скорее всего проблемы компилятора..бывает |
Автор: Нитонисе 20.1.2010, 22:26 | ||
Опять начались проблемы с Table. Редактирую записи таки образом. Меняю в них точку на запятую.
В итоге все записи успешно редактируются, но они как будто бы в каком-то кэше. Отображаются правильно в DBGrid, но файл размера не поменял, а должен был. |
Автор: dumb 20.1.2010, 22:36 |
ничего он не должен. формат хранения данных для всех СУБД свой, и, как правило, при изменении данных, размер контейнеров(файлов) не меняется. тебя это вообще не должно волновать. и где твоя логика?! - возьми текстовый файл, замени в нем все точки на запятые - размер поменяется? |
Автор: Данкинг 20.1.2010, 23:23 |
Да ладно. Возьми базу Access, добавь 1000 записей, потом их удали, потом добавь снова. Размер файла поменяется? Скорее, "Парадокс" непонятный. ![]() |
Автор: Нитонисе 21.1.2010, 00:30 | ||||
Я так пробовал с *.xml - тоже размер не меняется. Все записи как будто присутствуют в базе данных. Видимо есть возможность их восстановить. Они даже видны все, если просматривать файл в браузере. "Удаленные" записи имеют какой-то спец флаг, говорящий о том, что они !удаленные" ![]() |