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

Тема в разделе "Delphi - Базы данных", создана пользователем Angver, 15 янв 2007.

  1. Angver

    Angver New Member

    Регистрация:
    29 окт 2006
    Сообщения:
    1
    Симпатии:
    0
    Имеется код в Дельфях, который должен в БД Access менять значение в одной из таблиц.
    Код (Text):
    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. Кто может что посоветовать?
     
  2. Barmutik

    Barmutik Гость

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

    Код (Text):
    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;
     
Загрузка...

Поделиться этой страницей