Есть программа теста где вопросы берутся из бд Access. Но они идут по порядку, а как сделать что бы рандомно и без повторений?
Код:
procedure TForm4.Button1Click(Sender: TObject);
var a: Integer;
s: string;
v: string;
begin
a:= -1;
if(RadioButton1.Checked) then a:= 1
else if(RadioButton2.Checked) then a:= 2
else if(RadioButton3.Checked) then a:= 3;
if(a < 0) then ShowMessage('Необходимо дать ответ!')
else begin
Inc(QCount);
if((answers[a] = TrueAnswer[1]) or (answers[a] = TrueAnswer2[1])) then
inc(TrueCount);
ADOTable1.Next;
if(ADOTable1.EOF) then begin
s:= 'Тест завершен. Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount);
ShowMessage(s);
Button1.Enabled:= False;
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';
Edit4.Text:= '';
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
v:= 'Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount);
With ADOTAble1 do
begin
Close;
TableName:='result';
Open;
Insert;
FieldByName('ФИО').AsString:=NameStudent;
FieldByName('Группа').AsString:=Group;
FieldByName('Глава').AsString:=Nomer;
FieldByName('Результат').AsString:=V;
post;
end;
end
else Quest;
end;
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
if (NameStudentEdit.Text='')or(GroupEdit.Text='')or(ComboBox1.Text='') then
begin
ShowMessage('Все поля должны быть заполнены!');
exit;
end;
if(ComboBox1.ItemIndex <> -1) then begin
QCount:= 0;
with ADOTable1 do begin
Active:= false;
TableName:= 'Глава '+ComboBox1.Text;
Active:= True;
First;
TrueCount:= 0;
end;
Quest;
Button1.Enabled:= True;
NameStudent:=NameStudentEdit.Text;
Group:=GroupEdit.Text;
Nomer:=ComboBox1.Text;
end;
end;
procedure TForm4.FormActivate(Sender: TObject);
begin
NameStudentEdit.SetFocus;
end;
procedure TForm4.Quest;
begin
with ADOTable1 do begin
Edit1.Text:= FieldByName('Вопрос').AsString;
Edit2.Text:= FieldByName('Ответ А').AsString;
Edit3.Text:= FieldByName('Ответ Б').AsString;
Edit4.Text:= FieldByName('Ответ С').AsString;
TrueAnswer:= FieldByName('Правильный ответ').AsString;
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
end;
end;