![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте программисты! Помогите исправить ошибку.
Требуется написать курсовую работу "Тестирование в делфи". Форма с учетными данными всё выполняет правильно. Проблема возникает при записи вариантов ответов в базу данных аксесса. После выбора RadioButton1 и нажатии на кнопку, появляется ошибка: "Не удаётся вставить пустую строку. Необходим хотя бы один столбец значений." Код:
procedure TForm3.Button1Click(Sender: TObject); begin DM.M1V1.Open; DM.M1V2.Open; DM.M1V3.Open; DM.M1V4.Open; DM.M1V5.Open; DM.Testiruemiy.Open; DM.Testiruemiy.Last; DM.OtvetTestera.Open; DM.OtvetTestera.Append; If (RadioButton1.Checked=False) and (RadioButton2.Checked=False) and (RadioButton3.Checked=False) and (RadioButton4.Checked=False) and (RadioButton5.Checked=False) then MessageDlg('Выберите вариант ответа!', mtWarning, [mbOK],0) else begin If RadioButton1.Checked=True then begin if not (DM.OtvetTestera.FieldByName('ID_user').IsNull) then DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); if not (DM.OtvetTestera.FieldByName('№VO').IsNull) then DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); DM.OtvetTestera.Post; //MessageDlg(DM.M1V1.FieldValues['№VO'], mtWarning, [mbOK],0); DM.M1V1.Active:=True; //RadioButton1.Caption:= dm.M1V1.FieldValues['№VO']; a:=a+1; DM.ADOQuery1.Next; RadioButton1.Checked:=False; end; If RadioButton2.Checked=True then begin //DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); //DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); //DM.OtvetTestera.Post; //RadioButton2.Caption:= dm.M1V2.FieldValues['№VO']; a:=a+1; DM.ADOQuery1.Next; RadioButton2.Checked:=False; end; If RadioButton3.Checked=True then begin //DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); //DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); //DM.OtvetTestera.Post; a:=a+1; DM.ADOQuery1.Next; RadioButton3.Checked:=False; end; If RadioButton4.Checked=True then begin //DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); //DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); //DM.OtvetTestera.Post; a:=a+1; DM.ADOQuery1.Next; RadioButton4.Checked:=False; end; If RadioButton5.Checked=True then begin //DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); //DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); //DM.OtvetTestera.Post; a:=a+1; RadioButton5.Checked:=False; DM.ADOQuery1.Next; end; end; If a=25 then begin Button2.Visible:=True; DBMemo1.Visible:=False; RadioButton1.Visible:=False; RadioButton2.Visible:=False; RadioButton3.Visible:=False; RadioButton4.Visible:=False; RadioButton5.Visible:=False; Label1.Caption:='Спасибо за прохождение теста!'; end; end; Надеюсь на Вашу помощь! |
#2
|
||||
|
||||
![]() Код требует оптимизации, совершенно не читаем, по одной процедуре ничего не видно, непонятно к чему и какая секция относится, много повторов, прям бейсик какой-то итд. - будь ласка, сбросьте на zalil.ru весь проект посмотреть функционал в живую, только, пжлст, без мусора в виде экзешников и всяких там *.dcu, надо поглядеть
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Как умею). Вот исходник посмотрите пожалуйста.
http://zalil.ru/34884158 |
#4
|
||||
|
||||
![]() Вот непонятный кусок кода из модуля "M1":
Код:
procedure TForm3.Button1Click(Sender: TObject); begin ..... DM.OtvetTestera.Open; DM.OtvetTestera.Append; if (RadioButton1.Checked = False) and (RadioButton2.Checked = False) and (RadioButton3.Checked = False) and (RadioButton4.Checked = False) and (RadioButton5.Checked = False) then MessageDlg('Выберите вариант ответа!', mtWarning, [mbOK], 0) else begin if RadioButton1.Checked = True then begin if not (DM.OtvetTestera.FieldByName('ID_user').IsNull) then DM.OtvetTestera.FieldByName('ID_user').AsInteger := strtoint(DM.Testiruemiy.FieldValues['ID_user']); if not (DM.OtvetTestera.FieldByName('№VO').IsNull) then DM.OtvetTestera.FieldByName('№VO').AsInteger := strtoint(DM.M1V1.FieldValues['№VO']); DM.OtvetTestera.Post; ..... Или по крайней мере нужно изменить условие на обратное, а то получается, что если поле не пустое (т.е. not null, что в данном случае никогда не будет), то делаем в нём изменения, а если поле было пустое (что в данном случае будет всегда), то оно таким пустым и останется и в результате будет попытка записать полностью пустую запись. |
#5
|
|||
|
|||
![]() Это я так пыталась избавиться от ошибки.
Код:
procedure TForm3.Button1Click(Sender: TObject); begin ..... DM.OtvetTestera.Open; DM.OtvetTestera.Append; If (RadioButton1.Checked=False) and (RadioButton2.Checked=False) and (RadioButton3.Checked=False) and (RadioButton4.Checked=False) and (RadioButton5.Checked=False) then MessageDlg('Выберите вариант ответа!', mtWarning, [mbOK],0) else begin If RadioButton1.Checked=True then begin DM.OtvetTestera.FieldByName('ID_user').AsInteger:=strtoint(DM.Testiruemiy.FieldValues['ID_user']); DM.OtvetTestera.FieldByName('№VO').AsInteger:=strtoint(DM.M1V1.FieldValues['№VO']); DM.OtvetTestera.Post; ..... Последний раз редактировалось Anzhelika, 06.01.2014 в 13:17. |
#6
|
||||
|
||||
![]() Цитата:
Т.е. должно быть как-то так: Код:
if RadioButton1.Checked then begin if not DM.Testiruemiy.FieldByName('ID_user').IsNull then DM.OtvetTestera.FieldByName('ID_user').AsInteger := DM.Testiruemiy.FieldByName('ID_user').AsInteger; if not DM.M1V1.FieldByName('№VO').IsNull then DM.OtvetTestera.FieldByName('№VO').AsInteger := DM.M1V1.FieldByName('№VO').AsInteger; DM.OtvetTestera.Post; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Anzhelika (06.01.2014)
|
#7
|
|||
|
|||
![]() Да, вы правы. Но после стала появляться другая ошибка(. Она связана со схемой данных БД аксесса?
|
#8
|
|||
|
|||
![]() Всё заработало, спасибо). 2-ю ошибку решила в аксессе. убрала связь 1:М в схеме данных.
|