Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321

Зависание в цикле

03.08.2016, 12:27. Показов 1520. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
    D:=Date;
    DataModule1.QOther.SQL.Add('select * from clients where date_next=:date');
    DataModule1.QOther.Parameters.ParamByName('date').Value:=D;
    DataModule1.QOther.Open;
    Form3.Memo1.Clear;
 
  while not DataModule1.QOther.Eof   do
 label1.caption:=label1.caption +#13#10+ DataModule1.QOther.FieldByName('FIO').aSString  ;
end;
Участок кода получает текущую дату, далее ищет по таблице записи с сегодняшней датой и записывает столбиком фио соответствующим сегодняшней дате. Одиночно он выдает запись, в цикле просто зависает, в чем может быть проблема? База access. Делфи 7
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.08.2016, 12:27
Ответы с готовыми решениями:

Зависание в цикле
После выхода из for(), через break, j перестаёт увеличиваться. Почему? int j = 1; do { for ( ; j < 5; ++j) ...

Как програмно в цикле не доходя до конца, пропустить шаг в цикле?
Как програмно в цикле не доходя до конца, пропустить шаг в цикле?

При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти
При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти. Что не так и как правильно сделать? Не пинайте нуба! ...

24
5987 / 4562 / 1096
Регистрация: 29.08.2013
Сообщений: 28,202
Записей в блоге: 3
03.08.2016, 12:38
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
в чем может быть проблема?
вы забыли Query.Next
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
03.08.2016, 13:03  [ТС]
Стоял у меня next, ничего не было по другому...(
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
03.08.2016, 13:20
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Стоял у меня next
Без Next у тебя не будет движения по DataSet, все время находишься на 1-й строке
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
03.08.2016, 13:22  [ТС]
ну у меня пока что проблема в том что абсолютно ничего не произходит, из-за зависания на форме, где выполняется эта процедура
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
03.08.2016, 13:28
Delphi
1
2
3
4
5
  while not DataModule1.QOther.Eof   do begin
    label1.caption:=label1.caption +#13#10+ DataModule1.QOther.FieldByName('FIO').aSString;
    Application.ProcessMessages;
    DataModule1.QOther.Next;
  end;
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
03.08.2016, 13:28
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
абсолютно ничего не произходит
Так у тебя бесконечный цикл, вот и зависание.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
03.08.2016, 13:32  [ТС]
Почему бесконечный, ведь у меня ограниченное количество записей изначально
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
03.08.2016, 13:51
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Почему бесконечный
Потому что нет Next.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
03.08.2016, 13:55  [ТС]
У меня что так, что так висит, и пробывал с некст, и без, все одно и тоже
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
03.08.2016, 14:00
Мой вариант из #6 пробовал?
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
03.08.2016, 14:02  [ТС]
Это был 1 в 1 как первый мой вариант с некст, после зависаний стал разбирать из за чего происходит это все
0
5987 / 4562 / 1096
Регистрация: 29.08.2013
Сообщений: 28,202
Записей в блоге: 3
03.08.2016, 14:25
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
У меня что так, что так висит, и пробывал с некст, и без, все одно и тоже
это не правда

вы запросом получили таблицу с данными
далее циклом while not eof вы перебираете по 1 строке, но без next вы так и останетесь на первой строке

если есть next, но ничего не происходит - значит ошибка в другом
показывайте код
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
04.08.2016, 09:42  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 {ðåäàêòîð þçåðîâ}
procedure TForm3.N2Click(Sender: TObject);
begin
   DataModule1.QRed_user.Close;
   DataModule1.QRed_user.SQL.clear;
   DataModule1.QRed_user.SQL.Add('select * from accaunts where id=:id_user');
   DataModule1.QRed_user.Parameters.ParamByName('id_user').Value:=id_user;
   DataModule1.QRed_user.Open;
   Form2.Edit1.text:=DataModule1.QRed_user.FieldByName('login').aSString;
   Form2.Edit2.text:=DataModule1.QRed_user.FieldByName('pass').aSString;
   Form2.Edit3.text:=DataModule1.QRed_user.FieldByName('FIO').aSString;
   Form2.Edit4.text:=DataModule1.QRed_user.FieldByName('mail').aSString;
   Form2.Edit5.text:=DataModule1.QRed_user.FieldByName('tel').aSString;
   Form2.Show;
end;     {ðåäàêòîð þçåðîâ}
 
      {âûâîä íà ïàíåëè èíôîðìàöèè}
procedure TForm3.DBGridEh1CellMouseClick(Grid: TCustomGridEh;
  Cell: TGridCoord; Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer; var Processed: Boolean);
  var
    id_acc,id,st:integer;
begin
    id_acc:=DBGridEh1.DataSource.DataSet.Fields[0].AsInteger;
    id:=    DBGridEh1.DataSource.DataSet.Fields[1].AsInteger;
    st:=    DBGridEh1.DataSource.DataSet.Fields[2].AsInteger;
    panel1.Caption:=Inttostr(id);
    panel2.Caption:=Inttostr(id_acc);
    panel3.Caption:=Inttostr(st);
 end;       {âûâîä íà ïàíåëè èíôîðìàöèè}
 
procedure TForm3.FormShow(Sender: TObject);
var D:TDateTime;
begin    {Ñêðûòèå ïàíåëåé, åñëè íå àäìèí}
    if Form1.id_role <> 1 then
    begin
      panel1.Visible:=false;
      panel2.Visible:=false;
      panel4.Visible:=false;
    end;
 
    {çàãðóçêà èíôû â ãëàâíóþ òàáëèöó}
    DataModule1.QLoad_info.Close;
    DataModule1.QLoad_info.SQL.Clear;
    DataModule1.QLoad_info.sql.Add('select  id_stadia, clients.id, id_acc, accaunts.fio, clients.fio, date_zvon, date_next, clients.tel, data_zaved, comment from clients Inner join accaunts on  accaunts.id = clients.id_acc');
    DataModule1.QLoad_info.Open;
         {âûâîä êàïøèîíñ ôîðìû}
    DataModule1.QOther.Close;
    DataModule1.QOther.SQL.Clear;
    DataModule1.QOther.SQL.Add('select * from accaunts where id=:id');
    DataModule1.QOther.Parameters.ParamByName('id').Value:= form1.id_acc;
    DataModule1.QOther.Open;
    Form3.Caption:='Ïîëüçîâàòåëü -'+ DataModule1.QOther.FieldByName('FIO').aSString;
 
 
    {Çàïîëíåíèå ÌÅÌÎ1}
    DataModule1.QOther.Close;
    DataModule1.QOther.SQL.clear;
    D:=Date;
    DataModule1.QOther.SQL.Add('select * from clients where date_next=:date');
    DataModule1.QOther.Parameters.ParamByName('date').Value:=D;
    DataModule1.QOther.Open;
    Form3.Memo1.Clear;
 while not DataModule1.QOther.Eof do
   begin
    memo1.Lines.Add('Êëèåíòó ' + DataModule1.QOther.FieldByName('FIO').aSString + ' íåîáõîäèìî ïîçâîíèòü!' );
    Application.ProcessMessages;
    DataModule1.QOther.Next;
   end;
end;
Вот полный код( за исключением кнопок выхода и так далее) Зависает при переходе с главной формы авторизации, на которой код такой



Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 {áëîê ïðîâåðîê ïðîãðàììû íà îøèáêè è óñòðàíåíèå èõ ïðîãðàììíî}
procedure TForm1.FormShow(Sender: TObject);
begin
 If DataModule1.ADOConnection1.Connected =False
 Then DataModule1.ADOConnection1.Connected:=True;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i:integer;
  pass:string;
begin
  if (Edit1.text='')or(Edit2.Text='') then
   begin
     showMessage('Çàïîëíèòå âñå ïîëÿ!');
     Exit;
    end else
 
 
   DataModule1.QLogin.close;
   DataModule1.QLogin.SQL.clear;
   DataModule1.QLogin.SQL.Add('select * from accaunts');
   DataModule1.QLogin.Open;
    while not(DataModule1.QLogin.Eof) do
     if (DataModule1.QLogin.FieldByName('login').AsString = Edit1.text) and
        (DataModule1.QLogin.FieldByName('pass').AsString = Edit2.text) then
       begin
          id_acc:=DataModule1.QLogin.FieldByName('id').aSinteger;
          id_role:=DataModule1.QLogin.FieldByName('role').aSinteger;
        {Çàãðóçêà äàííûõ â ìåìî }
          Form3.show;
          Form1.Visible:=False;
       end else
         begin
          ShowMessage('Íåâåðíûå äàííûå!');
          Exit;
         end; 
 
end;
Добавлено через 3 минуты
Прошу прощения за кодировку, как настроить не знаю, чтобы тут нормально отображалось, мне удобнее на русском, если надо прокомментирую. Суть в том что пользователь авторизуется, загружается таблица, загружается мемо1, с нужными данными( если есть вариант отображения более приемлемый, чем мемо, подскажите пожалуйста) На мгновение мемо показывает данные, но тут же пропадают. И окно тупо висит, будто какой то цикл в цикле с подциклом работает. Но как я понимаю все циклы у меня выходят, либо очень малы по шагам.

Добавлено через 1 минуту
Если будет удобнее вам, могу скинуть проект
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
04.08.2016, 09:49
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Если будет удобнее вам, могу скинуть проект
Будет удобнее. И надо бы объявлять о какой СУБД речь.
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
как настроить не знаю, чтобы тут нормально отображалось
Перед отправкой выделенного текста в буфер обмена переключить русскую раскладку на клавиатуре.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
04.08.2016, 09:51  [ТС]
Вначале было написано access БД
Вложения
Тип файла: rar v. 1.0.0.0.rar (1.27 Мб, 2 просмотров)
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
04.08.2016, 09:52  [ТС]
Прога очень сырая еще, великое множество недочетов и недоработок. Советы и критику приму с удовольствием)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
04.08.2016, 10:32
Начало может выглядеть так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if (Edit1.text = '') or (Edit2.Text = '') then begin
    showMessage('Заполните все поля!');
    Exit;
  end;
 
  DataModule1.QLogin.SQL.Text := 'select * from accaunts';
  DataModule1.QLogin.Open;
  while not DataModule1.QLogin.Eof do begin
    if (DataModule1.QLogin.FieldByName('login').AsString = Edit1.text) and
       (DataModule1.QLogin.FieldByName('pass').AsString = Edit2.text) then
    begin
      id_acc := DataModule1.QLogin.FieldByName('id').aSinteger;
      id_role := DataModule1.QLogin.FieldByName('role').aSinteger;
       {Загрузка данных в мемо }
      Form1.Visible := False;
      Form3.show;
      break;
    end;
    DataModule1.QLogin.Next;
  end;
 
  if id_acc = 0 then
    ShowMessage('Неверные данные!');
end;
Проверено. "Зависания" нет.
0
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 321
04.08.2016, 11:12  [ТС]
Вроде все нормально, спсб но только некоторые юзеры теперь не входят, хотя логин пароль тот же пишу что и в БД

Добавлено через 4 минуты
и хотелось узнать, в чем была причина зависания

Добавлено через 3 минуты
А общее такое мнение о программе какое сложилось, мб что то я не учел? учитывая что пользователей я не прорабатывал толком
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
04.08.2016, 11:27
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
некоторые юзеры теперь не входят
У меня все входят.
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
и хотелось узнать, в чем была причина зависания
Не было метода Next, с помощью которого сканировались бы все записи полученные в запросе и наступал бесконечный цикл, если введенные логин и пароль совпадали с теми, что находились в первой записи. В этом случае постоянно вызывалась форма3, но выхода из цикла не было и он повторялся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2016, 11:27
Помогаю со студенческими работами здесь

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure TForm1.Button1Click(Sender: TObject); begin ...

Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
Занялся сабжем по проекту. IDE Builder 2010 1) Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле...

Зависание пк
Месяца 2 назад завис комп с характерным звуком (тррр). После чего это стало переодически повторяться(всегда со звуком), при чем после этого...

Зависание ПК
Была планка 4гб озу, добавил еще 4 гба другого производителя. Стабильная работа пк,но при нагрузке на озу,т.е. в играх, которые...

Зависание ОС
Здравствуйте, проблема следующая: - очень медленная работа и отказ большинства приложений в XP. Компьютер не мой, доступен только HDD....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru