Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Небольшая проблема в коде БД


Автор: mauar 7.5.2008, 20:59
Есть опросник.  3 варианта вопросов: 
Задаю переменную на правильный
ответ:
Код

var
 OtvetPravilno: Integer;
  OtvetNePravilno: Integer; 


Подключаюсь к базе с помощью процедуры так:
Код

 procedure TTMSForm1.Otvet(praviln: boolean);
begin

  DataModule1.ADOQueryResult.SQL.Clear;
  DataModule1.ADOQueryResult.SQL.Add('SELECT * FROM Itog WHERE Student = ''' +
    SelectStudent.KeyValue + '''');
  try
  DataModule1.ADOQueryResult.Open;
  except
    Application.MessageBox(PChar('Не удалось выполнить запрос.' + #13#10 +
  DataModule1.ADOQueryResult.SQL.GetText), 'ОШИБКА', MB_ICONERROR);
    Exit;
  end;

  if DataModule1.ADOQueryResult.RecordCount = 0 then
     DataModule1.ADOQueryResult.Insert
  else if DataModule1.ADOQueryResult.RecordCount = 1 then
     DataModule1.ADOQueryResult.Edit
  else begin
    while DataModule1.ADOQueryResult.RecordCount > 0 do DataModule1.ADOQueryResult.Delete;
    DataModule1.ADOQueryResult.Insert;
  end;

    DataModule1.ADOQueryResult.FieldByName('Student').Value :=
    SelectStudent.ListSource.DataSet.FieldByName('Student').Value;
    DataModule1.ADOQueryResult.FieldByName('Fakultet').Value :=
    SelectStudent.ListSource.DataSet.FieldByName('Fakultet').Value;
    DataModule1.ADOQueryResult.FieldByName('Gruppa').Value :=
    SelectStudent.ListSource.DataSet.FieldByName('Gruppa').Value;
    DataModule1.ADOQueryResult.FieldByName('Otvetil').Value := 1;
  if praviln then begin
    DataModule1.ADOQueryResult.FieldByName('Pravilno').Value := OtvetPravilno;
    DataModule1.ADOQueryResult.FieldByName('NePravilno').Value := OtvetNePravilno;
  end else begin
    DataModule1.ADOQueryResult.FieldByName('Pravilno').Value := OtvetPravilno ;
    DataModule1.ADOQueryResult.FieldByName('NePravilno').Value := OtvetNePravilno;
  end;
    DataModule1.ADOQueryResult.FieldByName('Ocenka').Value := 100;

  try
      DataModule1.ADOQueryResult.Post;
  except
    Application.MessageBox('Не удалось сохранить результаты тестирования.',
      'ОШИБКА', MB_ICONERROR);
    Exit;
  end;

    DataModule1.ADOTableItog.Close;
    DataModule1.ADOTableItog.Open;  // Обновим грид с результатами

    end;


при нажатии на кнопку должна записаться 1 
код:

Код

if AdvOfficeRadioButton10.Checked then begin
   // Правильный ответ
     Otvet(True);  inc(OtvetPravilno);
    end else begin
   // Неправильный ответ
   Otvet(False); inc(OtvetNePravilno);
    end;


и так 30 раз, значение должно получиться 30.
Но в итоге выдает 29 вместо 30. Куда 1 девается ?

Автор: Данкинг 8.5.2008, 00:38
Значение чего?? smile 

Кстати, не понял в чём разница:

Код

 if praviln then begin
    DataModule1.ADOQueryResult.FieldByName('Pravilno').Value := OtvetPravilno;
    DataModule1.ADOQueryResult.FieldByName('NePravilno').Value := OtvetNePravilno;
  end else begin
    DataModule1.ADOQueryResult.FieldByName('Pravilno').Value := OtvetPravilno ;
    DataModule1.ADOQueryResult.FieldByName('NePravilno').Value := OtvetNePravilno;

Автор: mauar 8.5.2008, 03:48
Цитата(Данкинг @  8.5.2008,  00:38 Найти цитируемый пост)
Значение чего??  
:


Значение просто цифер, ну если удобней для восприятия будем считать в деньгах,  можно считать сумма должна получиться 30 рублей  а выходит 29.


Цитата

Кстати, не понял в чём разница


без разницы так тоже не равботает:

Код

if praviln then begin
    DataModule1.ADOQueryResult.FieldByName('Pravilno').Value := OtvetPravilno;
end 
else begin
    DataModule1.ADOQueryResult.FieldByName('NePravilno').Value := OtvetNePravilno;
end; 


30 кнопчек идут по порядку на каждой странички PageControl'a по кнопочке нажимаем на кнопочку делается увеличение на  1 (допустим 1 рубь) и автоматичесски переключается на следующую вкладку  PageControla'a где стоит новая кнопочка с точно такими же функциями что и предыдущая.
Сама процедурв описанна один раз в начале кода, а дальше по нажатию кнопки обращаемся к этой процедуре чтобы увеличить значение на 1.

Напишу еще раз код этой кнопочки:
Код

if AdvOfficeRadioButton10.Checked then begin
   // Правильный ответ
     Otvet(True);  inc(OtvetPravilno);
    end else begin
   // Неправильный ответ
   Otvet(False); inc(OtvetNePravilno);
    end;


 Посмотрите пожалуйсто свежим взглядом со стороны, в чем может быть причина, ведь должно записаться 30, куда 1 девает не могу понять.

Автор: mauar 9.5.2008, 02:01
А в ответ тишина.

Автор: ASGDeveloper 10.5.2008, 10:24
Цитата(mauar @  9.5.2008,  02:01 Найти цитируемый пост)
А в ответ тишина. 

Эээ, может поменять местами Inc и Otvet?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)