|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема при вставке нового значения из запроса в таблицу Oracle
Здравствуйте!
Возникла проблем при вставке нового значения из запроса. Есть процедура на загрузку формы, где я выбираю из таблицы 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, 04.07.2010 в 19:06. |
#2
|
|||
|
|||
Перепищи код. На каждую операцию завели свой запрос и текст запроса задай во время разработки. поставновка занчений - через параметры.
У тебя это вообще не должно работать, т.к. в некоторых местах нет очистки от предыдущего запроса и добавляется новый. Вообще, как-то странно написано... |
#3
|
|||
|
|||
Почему тогда при первом выборе ответа всё работает???
И как переделать??? |
#4
|
|||
|
|||
Помогите плиз, работа горит...
|
#5
|
||||
|
||||
ну перед
Код:
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.SQL.Clear; Код:
DataModule2.OQuery.Execute; Код:
DataModule2.OQuery.Open; Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel |