Вылетает ошибка Table not in edit or insert mode, хотя все работает
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. А что бы не вылазили ошибки - не используй1 компонент TTable.
2. Или пользуйся отладчиком - скорей всего непосредственно с операцией ошибка не связана.
Прежде чем задать вопрос - используй
1. А что бы не вылазили ошибки - не используй1 компонент TTable.
2. Или пользуйся отладчиком - скорей всего непосредственно с операцией ошибка не связана.
Цитата: fantaser
А здесь, выдает, что LearnerTable not in edit or insert mode, хотя все выполняет.
Откажись от Taxxi. Меня в своё время эта ошибка задолбала просто.
Нашел где глючит, тока не понимаю почему!!!
Вот тут вылетает ошибка:
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().
Жду ответов и рекомендаций. Заранее благодарен.
Цитата: 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().
Жду ответов и рекомендаций. Заранее благодарен.
Нашел где глючит, тока не понимаю почему!!!
Вот тут вылетает ошибка:
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().
Жду ответов и рекомендаций. Заранее благодарен.
еще раз говорю - форматируй код.
То что ты показываешь - это уже перехват исключения. Установи точку останова и посмотри в каком месте твоей программы это происходит.
Цитата: 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();
//***// удаление и сохранение
[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 уже выдается для след. записи.