Здравствуйте!
Возникла проблем при вставке нового значения из запроса.
Есть процедура на загрузку формы, где я выбираю из таблицы Quest(id_test,id_quest,answer,correct_answer) поле id_quest и записываю его в переменную form1.idvopros.
Потом в этой же процедуре я этот form1.idvopros подставляю в запрос и вытаскиваю из таблицы Answer все ответы на вопрос и записываю их в Эдиты.
Вторая же процедура на кнопку перелистывает вопросы и ответы и пользователь выбирает вариант ответа и эта процедура вставляет поля в таблицу Answer_User.
Но при выборе из 2 вопроса ответа и дальнейшей вставке значения в таблицу влетает ошибка ORA-20002:Cannot insert Answer_User because Answer does not exist
Процедура на OnShow
Код:
procedure TStart_test.y();
var
i: integer;
begin
h:=0;
k:=0;
DataModule2.OracleQuery2.SQL.Add('select * from quest where id_test='+IntToStr(form1.idtest));
DataModule2.OracleQuery2.Execute;
form1.idvopros:=DataModule2.OracleQuery2.Field('id_quest');
DataModule2.OQuery.SQL.Add('select a.*,b.quest from answer a, quest b where a.id_quest='+IntToStr(form1.idvopros)+'and b.id_test='+IntToStr(form1.idtest)+'and a.id_quest=b.id_quest');
DataModule2.OQuery.Execute;
Start_test.Label1.Caption:=DataModule2.OracleQuery2.Field('quest');
while not DataModule2.OQuery.Eof do
begin
inc(k);
mass[k]:=DataModule2.OQuery.Field('id_quest');
otvet[k]:=DataModule2.OQuery.Field('Correct_Answer');
for i:=0 to ComponentCount-1 do
begin
if Components[i].Name = 'Edit' + IntToStr(k) then
begin
(Components[i] as TEdit).Text := DataModule2.OQuery.Field('Answer');
end;
end;
DataModule2.OQuery.Next;
end;
DataModule2.OQuery.Close;
DataModule2.OQuery.Clear;
end;
Процедура на кнопку
Код:
procedure TStart_test.Button4Click(Sender: TObject);
var
r,i: integer;
begin
DataModule2.ODS_Answer_User.Insert;
DataModule2.ODS_Answer_UserID_USER.AsInteger:=form1.iduser;
DataModule2.ODS_Answer_UserID_Test.AsInteger:=form1.idtest;
DataModule2.ODS_Answer_UserID_QUEST.AsInteger:=form1.idvopros;
DataModule2.ODS_Answer_UserID_ANSWER.AsInteger:=mass[RadioGroup1.ItemIndex+1];
DataModule2.ODS_Answer_UserCORRECT_ANSWER.AsString:=otvet[RadioGroup1.ItemIndex+1];
DataModule2.ODS_Answer_User.Post;
DataModule2.ODS_Answer_User.Refresh;
DataModule2.OracleQuery2.Next;
form1.idvopros:=DataModule2.OracleQuery2.Field('id_quest');
DataModule2.OQuery.SQL.Add('select a.*,b.quest from answer a, quest b where a.id_quest='+IntToStr(form1.idvopros)+'and b.id_test='+IntToStr(form1.idtest)+'and a.id_quest=b.id_quest');
DataModule2.OQuery.Execute;
k:=0;
while not DataModule2.OQuery.Eof do
begin
inc(k);
mass[k]:=DataModule2.OQuery.Field('id_quest');
otvet[k]:=DataModule2.OQuery.Field('Correct_Answer');
for i:=0 to ComponentCount-1 do
begin
if Components[i].Name = 'Edit' + IntToStr(k) then
begin
(Components[i] as TEdit).Text := DataModule2.OQuery.Field('Answer');
end;
end;
DataModule2.OQuery.Next;
end;
DataModule2.OQuery.Close;
DataModule2.OQuery.Clear;
end;
Admin: Учимся пользоваться тегами!