• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Ошибка при работе с БД Access

  • Автор темы Angver
  • Дата начала
A

Angver

Имеется код в Дельфях, который должен в БД Access менять значение в одной из таблиц.
Код:
procedure TForm1.Button6Click(Sender: TObject);
var
i, kol: integer;
SrB: real;
begin
Form1.StudInfoTable.First;
Form1.StudInfoTable.Edit;
while Form1.StudInfoTable.Eof<>TRUE do
begin
Form1.AttestatTable.First;
SrB:=0;
kol:=0;
i:=0;
while Form1.AttestatTable.Eof<>TRUE do
begin
SrB:=SrB+Form1.AttestatTableDSDesigner2.AsFloat;
if Form1.AttestatTableDSDesigner2.AsString='3' then
inc(kol);
Form1.AttestatTable.Next;
inc(i);
end;
SrB:=SrB/i;
Form1.StudInfoTableDSDesigner5.AsString:=FormatFloat('0.0',SrB);
Form1.StudInfoTableDSDesigner6.AsString:=IntToStr(kol);
Form1.StudInfoTable.Next;
end;
Form1.StudInfoTable.Post;
end;

При запуске этой функции Вылетает ошибка StudInfoTable: Dataset not in edit or insert mode.
Хотя в самом начале функции прописано, чтоб StudInfoTable переходил в Edit. Кто может что посоветовать?
 
B

Barmutik

Я не буду давать комментарии по поводу качества кода но я думаю что Вам поможет изменение кода следующим образом:

Код:
procedure TForm1.Button6Click(Sender: TObject);
var
i, kol: integer;
SrB: real;
begin
Form1.StudInfoTable.First;
while not Form1.StudInfoTable.Eof do
begin

// Edit MUST be done for EVERY record
Form1.StudInfoTable.Edit;
//
Form1.AttestatTable.First;
SrB:=0;
kol:=0;
i:=0;
while not Form1.AttestatTable.Eof do
begin
SrB:=SrB+Form1.AttestatTableDSDesigner2.AsFloat;
if Form1.AttestatTableDSDesigner2.AsString='3' then
inc(kol);
Form1.AttestatTable.Next;
inc(i);
end;
SrB:=SrB/i;
Form1.StudInfoTableDSDesigner5.AsString:=FormatFloat('0.0',SrB);
Form1.StudInfoTableDSDesigner6.AsString:=IntToStr(kol);

// commit changes MUST be done for EVERY record
Form1.StudInfoTable.Post;
//
Form1.StudInfoTable.Next;
end;
end;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!