Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Исчезнувшая информация из БД  (Прочитано 11082 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Laus
Гость
« : 17-08-2004 18:52 » 

Я написал программу на C++Builder 6.0 работающую с БД Paradox. И сталкнулся с такой проблемой:
Во время разработки и после компиляции в программе ошибок не возникало, все данные считывались (записывались) в БД, но после перезагрезки компьютера или очередного запуска Builder'а все сделанные изменения пропадали. Т.е. БД оставалась в том же виде, что и до изменений.  Так больше нельзя...
У меня появилось предположение, что изменения кэшируются в оперативной памяти и не записываются в БД вне зависимости от вызова команды Post(). При этом данный фрагмент памяти не очищается при окончании работы моей программы.

Хотелось бы узнать лучше данный механизм. Буду благодарен за любую информацию поданной теме.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 18-08-2004 05:19 » 

Надо полагать, через BDE работаешь...
А ты базу во время разработки заполнял? не во время работы программы? А каким средством пользовался в такмо случае? (программой, которая позволяет редактировать данные в БД)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Laus
Гость
« Ответ #2 : 18-08-2004 12:31 » 

Действительно, работал через BDE. Для ручного редактирования пользовался стандартной программой Database Desktop (она прилогается к Builder'у).
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 18-08-2004 14:31 » 

пользовался... не было таких глюков. А он у тебя постоянно повторяется?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Laus
Гость
« Ответ #4 : 18-08-2004 15:40 » 

3 раза
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 18-08-2004 19:40 » 

Опиши подробно процедуру сохранения таблицы. Вот открываешь ты Database Desktop, редактируешь данные, сохраняешь таблицу, выходишь из Database Desktop. Потом заходишь повторно - данные есть, опять выходишь. Перегружаешься - данных нет. Так что ли?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 18-08-2004 19:44 » 

Провёл проверку - нет такого глюка в Database Desktop, что и следовало ожидать.

Видимо, что-то ты не так делаешь или о чём-то забыл рассказать. Тебя спасёт максимальная подробность изложения.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Laus
Гость
« Ответ #7 : 19-08-2004 12:48 » 

Наверное ты меня не так понял.
Я редактировал БД через Database Desktop,  т.е.  к моменту запуска моей проги БД была не пустая.
Далее редактирование БД произходили программными средствами:

void __fastcall TFMain::DataSetEdit1Execute(TObject *Sender)
{
Table->Edit();
FNew->Show();
FNew->Caption="Редактировать записи";
FMain->Enabled=false;
}

Далее в форме FNew при нажатии кнопки Button1 произходит добавление записи:

void __fastcall TFNew::Button1Click(TObject *Sender)
{

DBEdit1->Text=DateToStr(DateTime->Date);
FMain->Table->Post();

FMain->Enabled=true;
FNew->Visible=false;
}

После этого при очередном обращении проги к БД появлялясь новая запись, т.е. её можно было увидеть.

Далее после перезагрузки компа новая запись исчезала.
При этом естественно оставались записи, которые я записал с помощью Database Desktop. Улыбаюсь
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #8 : 20-08-2004 10:04 » 

Я с БДЕ не работал, но возможно что вся проблема в транзакции
В SQL есть такая вещь:
если записи заносить в режиме транзакции, то они будут видны в процессе работы. Но если транзакцию не сохранить, то и все данные, занесенные в режиме транзакции, исчезнут
Записан

I Have Nine Lives You Have One Only
THINK!
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 20-08-2004 14:38 » 

Нет, в SQL такого понятия нет. Такую работу обеспечивает DataSet (ну и как следствие, Table и пр.) вроде бы, хотя точно не помню как у Борланда это делалось. Кажется, отсоединённый DataSet там отдельным компонентом идёт. DBEdit1 - это, судя по всему, текстовое поле на форме, связанное с полем таблицы. А код позиционирования на записи? Либо это DataGrid будет (без специального кода), либо ручками, методами таблицы First, Next и т.п. Как на FMain это реализовано? Может у тебя не в той записи обновление происходит? Значение при открытии формы редактирования верное?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 20-08-2004 14:45 » 

впрочем, надо полагать, что ты проверял факт записи в базу после работы твоей программы тем же Database Desktop, и данные там были...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Laus
Гость
« Ответ #11 : 21-08-2004 13:09 » 

Вообще-то нет, я не проверял факт записи, более того я подозреваю, что вся информация изменялась где-то в оперативной памяти а в БД не записывалась. Так что я больше склоняюсь к мнению HandKot.
Записан
Laus
Гость
« Ответ #12 : 21-08-2004 13:12 » 

В данном случае я решил эту проблему с помощью перехода на SQL
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 21-08-2004 17:24 » 

Laus, одобряю  Отлично. SQL всяко надёжнее, чем странности в реализации работы с БД в C++Builder. Улыбаюсь У меня знакомый пару месяцев назад так намучался с ним и IB, что даже на Delphi перешёл с горя Улыбаюсь, к тому же теперь исключительно ADO пользуется Улыбаюсь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines