![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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:М в схеме данных.
|