![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу понять причину
NotBeginer © (2006-01-14 11:05:00)Доброго времени суток.
Что-то я не пойму. объясните пожалуйсто.
есть цикл: При некоторых условиях он зависает
for k:=1 to FormMain.QuantityQ do
begin
find:=false; - при отладке вот отсюда прыгает в начало цикла, почему так? Код который находится ниже не выполняется
while not find do
begin
........
Заметил еще одну особунность
к примеру опять есть цикл
Count:=0;
for k:=1 to FormMain.QuantityQ do
begin
Какой-то код // после выполнения, пргает не в начало цикла, а то место где находится строка count:=0;
Fenik (2006-01-15 00:28:00) [21]dmData.tblQuestionsOut.InsertRecord([nil,IntToStr(i),IntToStr(ArrayOfQuestions[randomindex])]);;
Две точки с запятой ";" :)))
VirEx (2006-01-15 00:27:00) [22]
> [4] NotBeginer (15.01.06 00:14)
> У меня в проекте 2е формы, одна из них модальная, здесь
> и выполняется код, может это какую-то роль играет?
модальная форма если мне не изменяет память может влиять: все сообщения к главной форме игнорируются и цикл может прерваться...
Fenik (2006-01-15 00:26:00) [23]> NotBeginer (14.01.06 23:39) [2]
У меня ничего не зависло. Какого типа b?
NotBeginer (2006-01-15 00:26:00) [24]
ShowMessage('lol'); - Вот этот код выполняется каждый раз, и цикл зависате :\
{Ñëó÷àéíûì îáðàçîì âûáèðàåì âîïðîñû èç ìàññèâà è äîáàâëÿåì èõ â òàáëèöó}
for k:=1 to FormMain.QuantityQ do
begin
while not find do
begin
RandomIndex:=Random(QuestionsCount+4);
if (ArrayOfQuestions[randomindex]-1)and(RandomIndex>0) then
begin
dmData.tblQuestionsOut.InsertRecord([nil,IntToStr(i),IntToStr(ArrayOfQuestions[randomindex])]);;
find:=true;
QuestionID:=IntToStr(ArrayOfQuestions[randomindex]);
ArrayOfQuestions[randomindex]:=-1;
SqlCommand:='select QUESTION from TBL_QUESTIONS where ID_QUESTION='+QuestionID;
dmData.ADOCommandIN.CommandText:=SqlCommand;
RVFQuestion := dmData.ADOCommandIN.Execute.Fields[0].Value;
assignfile(f,ExtractFilePath(ParamStr(0))+IntToStr(i)+IntToStr(k)+'.qus');
rewrite(f);
writeln(f,RVFQuestion);
closefile(f);
end;
end;
find:=false;
{Çàïucûâàåì â òàáëèöó âàðèàíòû îòâåòîâ}
dmData.tblAnswers.Requery;
ACount:=0;
while not dmData.tblAnswers.Eof do
begin
Inc(Acount);
dmData.tblQuestions.Locate('ID_QUESTION',QuestionID,[loCaseInsensitive, loPartialKey]);
QuestionID_Q:=dmData.tblAnswers.FieldValues['ID_QUESTION'];
AnswerID:=dmData.tblAnswers.FieldValues['ID_ANSWER'];
CorrectString:=dmData.tblAnswers.FieldValues['Correct'];
Correct:=StrToBool(CorrectString);
Beep;
if QuestionID=QuestionID_Q then
begin
dmData.tblAnswersOut.InsertRecord([nil,QuestionID,Acount,BoolToStr(Correct)]);
end;
SqlCommand:='select ANSWER from TBL_ANSWERS where ID_ANSWER='+AnswerID;
dmData.ADOCommandIN.CommandText:=SqlCommand;
try
RVFAnswer := dmData.ADOCommandIN.Execute.Fields[0].Value;
assignfile(f,ExtractFilePath(ParamStr(0))+IntToStr(i)+IntToStr(k)+'.'+IntToStr(ACount));
rewrite(f);
writeln(f,RVFAnswer);
closefile(f);
except end;
dmData.tblAnswers.Next;
end;
{///---///}
end;
{/----------------/}
end;
Fenik (2006-01-15 00:21:00) [25]Покажите все тело цикла.
NotBeginer (2006-01-15 00:14:00) [26]У меня в проекте 2е формы, одна из них модальная, здесь и выполняется код, может это какую-то роль играет?
Уже измучался, не знаю что делать, причем иногда все нормально работает, но чаше происходит то, что я описал
VirEx (2006-01-15 00:02:00) [27]
> [2] NotBeginer (14.01.06 23:39)
а где этот код? может выполняется в другом потоке?
NotBeginer (2006-01-14 23:39:00) [28]Так и не разобрался.
Почему может быть такое:
При выполнение следующего цикла, каждый раз цикл прыгает на строчку ShowMessage('tttt'); и программа зависает, i так и остается равным 1.
ShowMessage('tttt');
for i:=1 to 100 do
begin
inc(b)
end;
Virgo_Style (2006-01-14 11:58:00) [29]При некоторых условиях он зависает
Есть мнение, что это условие - find=false