Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятности с компонентом Table 
:(
    Опции темы
Нитонисе
Дата 20.1.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Хочу изменить значения в базе данных. Набо из 3000 записей. Программно по всем им прохожу, меняя значение одного поля. Но размер вбайтах файла базы данных *.db не меняется, хотя и при выполнении программы и впроцессе проектирования - база данных уже представлена в измененном виде. Однако перезагружаю компьютер - и база данных в старом своем состоянии. Такое ощущения что эти изменения хранятся в каком-то кэше, и нужно применить что-то типа ApplyUpdates. В чем тут дело?
Похожая история с копированием записей из одной базы в другую. Вроде бы все скопировалось, однако размеры как исходной базы данных, так и той, куда копировал - остались без изменений, хотя в процессе выполнения программы все отображается нормально, до перезагрузки компьютера.
PM MAIL   Вверх
azesmcar
Дата 20.1.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата(Нитонисе @  20.1.2010,  14:53 Найти цитируемый пост)
Такое ощущения что эти изменения хранятся в каком-то кэше, и нужно применить что-то типа ApplyUpdates. В чем тут дело?

 smile 
Ну в общем-то так оно и есть, и больше всего меня веселит то, что функция так и называется smile 
Кажется там была опция CashedUpdates, можно ее убрать. Давно это было, точно не помню.
PM   Вверх
Нитонисе
Дата 20.1.2010, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(azesmcar @  20.1.2010,  15:02 Найти цитируемый пост)
Ну в общем-то так оно и есть, и больше всего меня веселит то, что функция так и называется

Называется-то она так, но не работает
Код

        T2->Append();
        T2->FieldByName("A")->AsString = "текст";       
        T2->ApplyUpdates();
        T2->Post();

Выдает ошибку - T2: Not in cached update mode.
T2 - это компонент класса TTable.
PM MAIL   Вверх
azesmcar
Дата 20.1.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Нитонисе

вызывай ApplyUpdates() после функции Post() и ApplyUpdates стоит вызывать если CashedUpdates стоит.
PM   Вверх
Нитонисе
Дата 20.1.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(azesmcar @  20.1.2010,  15:45 Найти цитируемый пост)
вызывай ApplyUpdates() после функции Post() и ApplyUpdates стоит вызывать если CashedUpdates стоит.

После Post() пишет ошибку - Database not in insert or edit mode. CashedUpdates на это никак не влияет. Да и вообще - эту опцию нужно ставить если надо кэшировать данные. А мне-то этого не надо. Мне надо сразу записывать. Потому CashedUpdates у меня всегда false. Но база почему-то не обновляется после прямой записи.
PM MAIL   Вверх
azesmcar
Дата 20.1.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Код

        T2->Insert();
        T2->FieldByName("A")->AsString = "текст";       
        T2->Post();


Так не работает?
PM   Вверх
Нитонисе
Дата 20.1.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(azesmcar @  20.1.2010,  16:15 Найти цитируемый пост)
Так не работает?

Ох и непонятный это компонент. Заменил на инсерт - сработало. Но мне нужно именно аппенд. Заменил обратно - и снова сработало. Что стало причиной - неясно, но проблема пока не проявляется.
PM MAIL   Вверх
azesmcar
Дата 20.1.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Скорее всего проблемы компилятора..бывает
PM   Вверх
Нитонисе
Дата 20.1.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Опять начались проблемы с Table.
Редактирую записи таки образом. Меняю в них точку на запятую.
Код

while (!Table1->EOF)
  {
     AnsiString s = Table1->FieldByName("Name")->AsString;
     int p = s.Pos(".");
     if (p)
       {
            s.Delete(p,1);
            s.Insert(",",p);
            Table1->Edit();
            Table1->FieldByName("Name")->AsString = s;
            Table1->Post();
       }
     Table1->Next();
  }

В итоге все записи успешно редактируются, но они как будто бы в каком-то кэше. Отображаются правильно в DBGrid, но файл размера не поменял, а должен был. 
PM MAIL   Вверх
dumb
Дата 20.1.2010, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Нитонисе @  20.1.2010,  22:26 Найти цитируемый пост)
но файл размера не поменял, а должен был
ничего он не должен. формат хранения данных для всех СУБД свой, и, как правило, при изменении данных, размер контейнеров(файлов) не меняется. тебя это вообще не должно волновать.
и где твоя логика?! - возьми текстовый файл, замени в нем все точки на запятые - размер поменяется?
PM MAIL   Вверх
Данкинг
Дата 20.1.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Нитонисе @  20.1.2010,  22:26 Найти цитируемый пост)
но файл размера не поменял, а должен был.  

Да ладно. Возьми базу Access, добавь 1000 записей, потом их удали, потом добавь снова. Размер файла поменяется?

Цитата(Нитонисе @  20.1.2010,  16:50 Найти цитируемый пост)
Ох и непонятный это компонент.

Скорее, "Парадокс" непонятный. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Нитонисе
Дата 21.1.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(dumb @  20.1.2010,  22:36 Найти цитируемый пост)
ничего он не должен. формат хранения данных для всех СУБД свой, и, как правило, при изменении данных, размер контейнеров(файлов) не меняется. тебя это вообще не должно волновать.
Кстати да... наверное ты прав. То есть получается что если у меня база данных с одним текстовым полем, размером 255 символов, то ее размер в байтах при значении этого поля всего в один текстовый символ не будет отличаться от размера в байтах если поле будет содержать 255 символов?

Цитата(Данкинг @  20.1.2010,  23:23 Найти цитируемый пост)
Да ладно. Возьми базу Access, добавь 1000 записей, потом их удали, потом добавь снова. Размер файла поменяется?

Я так пробовал с *.xml - тоже размер не меняется. Все записи как будто присутствуют в базе данных. Видимо есть возможность их восстановить. Они даже видны все, если просматривать файл в браузере. "Удаленные" записи имеют какой-то спец флаг, говорящий о том, что они !удаленные" smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1426 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.