Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу понять причину


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо