Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2010, 14:05   #1
Treshmazai
 
Регистрация: 07.05.2010
Сообщений: 5
По умолчанию Delphi7

Всем доброго времени суток.

Прошу помочь знающий людей в следующей проблемке:

Пытаюсь сделать программу-генератор экз. билетов(в билете от 3 до 5 вопросов по РАЗНЫМ предметам).
В базе Имеются 2 таблички(в ms sql server 2000): Subjects:n_subject, subject.
Questions: n_subject, n_quest, question. ( таблички соеденены по полю n_subject, знаю что мона все сделать с1 табличкой, но надо так).

вообщем моя идея: Чеклистбокс смотрит из таблицы Subjects предметы. Я выделяю нужные, программка рандомом извлекает из таблицы Questions вопросы(глядя на id чеклистбокса) в какой нить мемо или лучше даже ричэдит. Плюс еще и нужна проверка на исключение дублирования вопросов. Количество билетов задаётся пользователем(edit1 )

Реализация: Пытался реализовать так, чтобы сначала был запрос в адоквери на выборку всех выделенных предметов из чеклистбокса, отрандомил их и выводил в ричэдит.

мой бред:

a:array[1..200] of string;
b:array[1..200] of string;
c:array[1..200] of integer;
begin
{
k:=0;
for i:=0 to checklistbox1.Items.Count - 1 do
if CheckListBox1.Checked[i] then
begin
k:=k+1;
end;
}// количество выделенных записей чеклистбокса

n := StrToInt(form5.Edit1.Text) ; кол.билтетов)
for i:=0 to checklistbox1.Items.Count - 1 do //от 0 до 4
if CheckListBox1.Checked[i] then // если итем выделен то:
begin

datamodule2.ADOQuery3.SQL.Clear;
datamodule2.ADOQuery3.SQL.Add('Sele ct Question from Questions where n_subject ='+ inttostr(i+1) + '');
datamodule2.ADOQuery3.Open;
datamodule2.ADOQuery3.First;
for ii:=1 to n do
begin
a[ii] := datamodule2.ADOQuery3.FieldByName(' question').AsString;
datamodule2.ADOQuery3.Next;
end;
for iii := 1 to n do
begin
randomize;
m := round(random(n));
b[iii] := a[m];
end;

begin //проверка на совпадение
for iii := 1 to n do begin
randomize;
metka1: m := round(random(n));
for j:=1 to n do
if c[j] = m then GOTO metka1;
b[iii] := a[m]; end;
end;
end;

for iii := 1 to n do
showmessage(b[iii]);

end;

В данном коде грубо использовал goto, для теста. И вывел результат только шоумесаджем. Рандом почему то работает криво, дублирует и иногда даже выдаёт пустое сообщение. Прошу помочь, не знаю как всё это реализовать =(
Treshmazai вне форума Ответить с цитированием
Старый 08.05.2010, 11:58   #2
Treshmazai
 
Регистрация: 07.05.2010
Сообщений: 5
По умолчанию

хах, понял, меня сейчас переместят в раздел студентов =)
Treshmazai вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi7 Veterok0587 Помощь студентам 4 07.04.2010 16:48
Delphi7 and .PNG Бутаков_Сергей Компоненты Delphi 2 16.02.2010 16:24
звук в Delphi7 elda Мультимедиа в Delphi 2 20.12.2009 14:58