powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма страшно тормазит во время цикла.
6 сообщений из 6, страница 1 из 1
Форма страшно тормазит во время цикла.
    #32544887
azz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форма запускакт страшный цикл по апдейту Базы данных на пару часов и перестает реагировать. Комп практически виснетю Что делать?
...
Рейтинг: 0 / 0
Форма страшно тормазит во время цикла.
    #32544903
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведи код этого старшного цикла.
...
Рейтинг: 0 / 0
Форма страшно тормазит во время цикла.
    #32544962
azz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
thisform.txtKgsDa.changevalue("Start...")


if thisform.chkKGS_DA.Value =  1 

txtSQL ="delete from TKGS_DA"
SQL(txtSQL)

do while substr(theString, 1 , 2 ) = "KG"
txtVersion = substr(theString, 1 , 9 )
dKG_DATUM=substr(theString, 16 , 2 )+"."+substr(theString, 14 , 2 )+"."+substr(thestring, 10 , 4 )
nKG_SCHLUESSEL = substr(theString, 18 , 8 )
txtKG_SATZART = substr(theString,  26 , 1 )
txtKG_NAME = substr(theString,  27 , 40 )

txtSQL = "INSERT INTO TKGS_DA(VERSION, KG_DATUM,KG_SCHLUSSEL,KGSATZART,KG_NAME) VALUES('" + tochar(txtVersion)+"','"+dKG_DATUM+"','"+ tochar(nKG_SCHLUESSEL)+"','"+tochar(txtKG_SATZART)+"','"+txtKG_NAME+"')"

SQL(txtSQL)


theString = fgets(DBFile)
theString = theString + fgets(DBFile)
enddo
thisform.txtKgsDa.changevalue("Fertig...")

*Skip
else
thisform.txtKgsDa.changevalue("Uberspringe...")
	do while substr(theString, 1 , 2 ) = "KG"
		theString = fgets(DBFile)
		theString = theString+fgets(DBFile)		
	enddo
thisform.txtKgsDa.changevalue("Ubersprungen...")
endif
I takih tam 12 schtuk. scego 450 Mb v Bazu skidivau
...
Рейтинг: 0 / 0
Форма страшно тормазит во время цикла.
    #32545043
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В длительных циклах обычно вставляют самописный индикатор прогресса, ну, или запускают какой-то AVI-файл с тем, чтобы пользователь не дергался и видел, что идет процесс и программа не зависла. В простейшем случае, можно просто в начале цикла писать

lnI=m.lnI+1
WAIT WINDOW NOWAIT STR(m.lnI)

2. Если речь идет о командах, посылаемых на сервер, то в циклических командах хорошо зарекомендовали себя команды предварительной компиляции запроса. Посмотрите описание команды SQLPrepare(). Т.е. вместо явного указания значения в команде INSERT указывается набор параметров (через вопросительный знак). Общий код выглядит примерно так:

txtSQL = "INSERT INTO TKGS_DA(VERSION, KG_DATUM,KG_SCHLUSSEL,KGSATZART,KG_NAME) VALUES(?txtVersion, ?dKG_DATUM, ?nKG_SCHLUESSEL, ?txtKG_SATZART, ?txtKG_NAME)"

* Предварительная компиляция запроса на сервере
=SQLPrepare(m.lnCH,m.txtSQL)
* Собственно цикл
DO WHILE ...
txtVersion = ...
dKG_DATUM = ...
nKG_SCHLUESSEL = ...
txtKG_SATZART = ...
txtKG_NAME = ...

=SQLExec(m.lnCH)
ENDDO

3. У тебя очень большое время тратится на формирование значений (fgets). Построчное чтение из текстового файла - это ОЧЕНЬ медленная операция. Используй групповые команды APPEND FROM, чтобы качнуть сразу все из текстового файла во временную таблицу. Потом делай разборку содержимого этой временной таблицы, но тоже через групповые команды, вроде REPLACE FOR или DELETE FOR. А если еще использовать Remote View для записи, то закачка ускорится многократно.
...
Рейтинг: 0 / 0
Форма страшно тормазит во время цикла.
    #32545102
azz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ti mena obsalutno ne ponal....
Vrema raboti ne problema, vrema sostovlenija komandi v hudschem slucae 1/20 ot vremeni peredaci dannih na server.
Da i otobrajenie protsesa mena ne volnuet.
Forma uje napisana, ogromnoe kolicestvo teksta. Perepisivat ejo ctobi sokratit 4 casovuju rabotu programmi na 20 minut ja ne soberaus.
Mne prosto nujno ctob komp ne podvesal, i ctob vo vrema raboti ja mog najat na etoj forme knopku... I vse. Podskaji pojalujsta esli znaesch kak!
...
Рейтинг: 0 / 0
Форма страшно тормазит во время цикла.
    #32545225
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DOEVENTS - тебе поможет

Просто все методы в FoxPro выполняются "линейно". Невозможно запустить другой процесс, пока не завершится процедура с циклом. Команда DOEVENTS как раз и призвана проверить - нет ли еще какого процесс в очереди и запустить его.

Однако, до VFP7 ее использование еще больше увеличит время выполнения. Если у тебя версия младше 7, то запускай ее с определенным интервалом, раз в 100 итераций цикла, например.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма страшно тормазит во время цикла.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]