Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вылетает ошибка Table not in edit or insert mode, хотя все работает

18K
20 апреля 2007 года
fantaser
14 / / 22.01.2007
Все привет. Подскажите, плиз, в чем прикол. Вот код, а за которым следует его описание и описание выдаваемых ошибок.

if (MessageBox(0, "Вы уверены, что хотите переместить абитуриента в студенты?", "Перемещение",MB_YESNO|MB_ICONQUESTION|MB_TOPMOST|MB_TASKMODAL)==mrYes)
{
//***// Открытие окна учеников //***//
Application->CreateForm(__classid(TFormAddOrChangeLearner), &FormAddOrChangeLearner);

FormAddOrChangeLearner=new TFormAddOrChangeLearner(this);
GeneralForm->FormStyle=fsMDIForm;
FormAddOrChangeLearner->FormStyle=fsMDIChild;
FormAddOrChangeLearner->Visible=true;

ActionAddNewLaerner->Enabled=false;

FormAddOrChangeLearner->ButCancel->Enabled=false;
FormAddOrChangeLearner->ButChangeLearner->Enabled=false;
//***//

//***// Поиск отдела по его номеру
TLocateOptions FindOptions;
FindOptions<<loCaseInsensitive<<loPartialKey;


DBDataModule->SectionTable->Active=true;

DBDataModule->SectionTable->Open();
DBDataModule->SectionTable->Locate("SectionId", StrToInt(DBDataModule->AuditionTable->FieldByName("AuditionSection")->AsString), FindOptions);
//***// Конец поиска //***//


//***// Присвоение данных определенным полям //***//
DBDataModule->AuditionTable->Open();

FormAddOrChangeLearner->EditLearnerSection->Text=DBDataModule->SectionTable->FieldByName("SectionName")->AsString;
FormAddOrChangeLearner->EditNumberSection->Text=DBDataModule->SectionTable->FieldByName("SectionId")->AsString;


// Добавление остальных сведений
FormAddOrChangeLearner->EditLearnerFamily->Text=DBDataModule->AuditionTable->FieldByName("AuditionFamily")->AsString;
FormAddOrChangeLearner->EditLearnerName->Text=DBDataModule->AuditionTable->FieldByName("AuditionName")->AsString;
FormAddOrChangeLearner->EditLearnerOtchestvo->Text=DBDataModule->AuditionTable->FieldByName("AuditionOtchestvo")->AsString;
FormAddOrChangeLearner->EditLearnerBorn->Text=DBDataModule->AuditionTable->FieldByName("AuditionBornYear")->AsString;
FormAddOrChangeLearner->EditLearnerTelephone->Text=DBDataModule->AuditionTable->FieldByName("AuditionTelephone")->AsString;


//***// удаление и сохранение
DBDataModule->AuditionTable->Edit();
DBDataModule->AuditionTable->Delete();
DBDataModule->AuditionTable->Post();

}

}

Значит так. Он должен открыть окно и в эдиты засунуть инфу из БД. Он это делает. Но когда он начинает удалять (причем он удаляет) - выдает
abstract error или AuditionTable not in edit or insert mode. Почему?

Вот другой код:

if (MessageBox(0, "Вы уверены, что хотите восстановить ученика?", "Перемещение",MB_YESNO|MB_ICONQUESTION|MB_TOPMOST|MB_SYSTEMMODAL)==mrYes)
{

DBDataModule->LearnerTable->Append();
DBDataModule->SendDownTable->Open();

DBDataModule->LearnerTable->FieldByName("LearnerName")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerName")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerFamily")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerFamily")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerOtchestvo")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerOtchestvo")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerSection")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerSection")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerClass")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerClass")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerProgramm")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerProgramm")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerClassRuk")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerClassRuk")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerPU")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerPU")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerSolfedgio")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerSolfedgio")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerBorn")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerBorn")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerMamFIO")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerMamFIO")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerPapFIO")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerPapFIO")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerAdress")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerAdress")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerSex")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerSex")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerLgoty")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerLgoty")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerTelephone")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerTelephone")->AsString;
DBDataModule->LearnerTable->FieldByName("LearnerZachislenDate")->AsString=DBDataModule->SendDownTable->FieldByName("LearnerZachislenDate")->AsString;



// самое последнее действие
DBDataModule->SendDownTable->Edit();
DBDataModule->SendDownTable->Delete();

//Сохранение сведений
DBDataModule->SendDownTable->Post();
DBDataModule->LearnerTable->Post();


}
А здесь, выдает, что LearnerTable not in edit or insert mode, хотя все выполняет.

Заранее благодарен. Жду ответов.
1
20 апреля 2007 года
kot_
7.3K / / 20.01.2000
Прежде чем задать вопрос - используй средства форматирования кода.
1. А что бы не вылазили ошибки - не используй1 компонент TTable.
2. Или пользуйся отладчиком - скорей всего непосредственно с операцией ошибка не связана.
10
20 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: fantaser
А здесь, выдает, что LearnerTable not in edit or insert mode, хотя все выполняет.


Откажись от Taxxi. Меня в своё время эта ошибка задолбала просто.

18K
24 апреля 2007 года
fantaser
14 / / 22.01.2007
Всем спасибо, но отказаться от этого компонента не могу - уже слишком многое сделано на нем.

Нашел где глючит, тока не понимаю почему!!!


Вот тут вылетает ошибка:
DB.pas

procedure DatabaseError(const Message: string; Component: TComponent = nil);
begin
if Assigned(Component) and (Component.Name <> '') then
!!!ТУТ!!!>> raise EDatabaseError.Create(Format('%s: %s', [Component.Name, Message])) else
raise EDatabaseError.Create(Message);
end;


Причем, глючит та таблица, из которой я копирую, и в которой удаляю. Т.е. при переносе из Учеников в Выпускники - глючат Ученики.
Такое впечатление, что глючит Delete() или Post().

Жду ответов и рекомендаций. Заранее благодарен.
1
24 апреля 2007 года
kot_
7.3K / / 20.01.2000
Цитата: fantaser
Всем спасибо, но отказаться от этого компонента не могу - уже слишком многое сделано на нем.

Нашел где глючит, тока не понимаю почему!!!


Вот тут вылетает ошибка:
DB.pas

procedure DatabaseError(const Message: string; Component: TComponent = nil);
begin
if Assigned(Component) and (Component.Name <> '') then
!!!ТУТ!!!>> raise EDatabaseError.Create(Format('%s: %s', [Component.Name, Message])) else
raise EDatabaseError.Create(Message);
end;


Причем, глючит та таблица, из которой я копирую, и в которой удаляю. Т.е. при переносе из Учеников в Выпускники - глючат Ученики.
Такое впечатление, что глючит Delete() или Post().

Жду ответов и рекомендаций. Заранее благодарен.


еще раз говорю - форматируй код.
То что ты показываешь - это уже перехват исключения. Установи точку останова и посмотри в каком месте твоей программы это происходит.

2.1K
25 апреля 2007 года
elan
56 / / 10.04.2003
Цитата: fantaser
Все привет. Подскажите, плиз, в чем прикол. Вот код, а за которым следует его описание и описание выдаваемых ошибок.


//***// удаление и сохранение
[color=red]DBDataModule->AuditionTable->Edit();[/color]
DBDataModule->AuditionTable->Delete();
[color=red]DBDataModule->AuditionTable->Post();[/color]


Вот другой код:


// самое последнее действие
[color=red]DBDataModule->SendDownTable->Edit();();[/color]
DBDataModule->SendDownTable->Delete();

//Сохранение сведений
[color=red]DBDataModule->SendDownTable->Post();();[/color]
DBDataModule->LearnerTable->Post();

Чтоб удалить запись, нужно просто вызвать Delete.
Post нужен только для Edit/Insert/Append.

В данном случае удаляешь запись, которая находится в Edit режиме, а команда Post уже выдается для след. записи.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог