powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как можно ускорить работы программы?
25 сообщений из 50, страница 1 из 2
как можно ускорить работы программы?
    #33749128
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне из одну очень большую таблицу (t1) надо получить 3 разные таблицу
Получанные таблицы по такому принципу должно упрядочоватся. Эти цифры показываеть nомер записи (recno()).
1-я таблица:
1
301
601
901
1201

2
302
602
902
1202

3
303
603
903
1203
....

2-я таблица:
101
401
701
1001
1301

102
402
702
1002
1302

3
403
703
1003
1303
....

3-я таблица:
201
501
801
1101
1401

202
502
802
1102
1402

203
503
803
1103
1403
...
Использую такой код(cap.prg). Но очень долго идеть обработка. Подскажите пожалуста, как можно ускорить работы этого программы?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33749175
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE CURSOR test (ID i)

FOR i =  1  TO  1000 
INSERT INTO test (id) VALUES (i)
endfor

SELECT * FROM test WHERE MOD(id -  1 , 300 ) =  0 
SELECT * FROM test WHERE MOD(id -  2 , 300 ) =  0 
SELECT * FROM test WHERE MOD(id -  3 , 300 ) =  0 
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33749226
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На примере одной таблицы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
* Создаю структуру таблицы
SELECT BigTable
COPY STRUCTURE TO Tab1

* Наполнение таблицы
FOR m.lnI= 1  TO  300 
	* Выборка во временную таблицу очередной порции данных
	SELECT Recno(), * ;
	FROM BigTable ;
	INTO CURSOR curTab ;
	WHERE MOD(Recno(), 300 )=m.lnI ;
	ORDER BY  1 

	* Копирование данных из очередной выборки в итоговую таблицу
	select Tab1
	APPEND FROM (DBF("curTab"))
ENDFOR

Остальные формируются и заполняются аналогично. Надо только менять начальное и конечное значение m.lnI в цикле

BigTable - это твоя исходная таблица
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33749232
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да очень быстро работаеть, но результат не так как нужен
У Вас (1-я таблица)
1
30
601
901
1201
1501
1801
2101
2401
2701
3001
3301
3601
4201
Надо:
1
301
601
901
1201
2
302
602
902
1202
3
303
603
903
1203
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33749250
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Да очень быстро работаеть, но результат не так как нужен


Это кому адресовано.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33749268
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это мне и для первой таблицы надо брать записи с номером не более 1500, то добавь это условие в WHERE

Код: plaintext
1.
2.
SELECT ...
WHERE MOD(Recno(), 300 )=m.lnI AND Recno()<= 1500  ...
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750118
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предедущий пост я адресовал к PaulWist.
ВладимирМ, если добавить
WHERE MOD(Recno(),300)=m.lnI AND Recno()<=1500
1-я таблица закончивается в recno()=1499.
Если в исходным таблице у меня 1000000 записей, тогда как будеть осталные часть 1-й таблицы?
После 1499

(299
599
899
1199
1499)


таблица так должна продолжатся:

300
600
900
1200
1500

301
601
901
1201
1501

.....
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750233
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты тестовый код запускал? Где там 1-30, там сразу 1-301.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750312
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist, я не понял Вас.

Где у Вас 1-30:

CREATE CURSOR test (ID i)

FOR i = 1 TO 1000
INSERT INTO test (id) VALUES (i)
endfor

SELECT * FROM test WHERE MOD(id - 1,300) = 0
SELECT * FROM test WHERE MOD(id - 2,300) = 0
SELECT * FROM test WHERE MOD(id - 3,300) = 0
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750344
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы сначала задачу четко сформулировал, тогда бы и сам может ускорил бы.
Как я понимаю из исходных данных:
1. сортировать сначала по младшей цифре номера записи, а затем по всем остальным
2. выбирать записи у которых младшая цифра не равна нулю и старшие с шагом 30 начиная с 0, 10 и 20 соответственно.

Поправь если я не так понял.

select Recno() as Row, mod(Recno(), 10) as Low, int(Recno() / 10) as High, ... from bsname order by 2, 3 having Low != 0 and mod(High, 30) = 0
select Recno() as Row, mod(Recno(), 10) as Low, int(Recno() / 10) as High, ... from bsname order by 2, 3 having Low != 0 and mod(High, 30) = 10
select Recno() as Row, mod(Recno(), 10) as Low, int(Recno() / 10) as High, ... from bsname order by 2, 3 having Low != 0 and mod(High, 30) = 20
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750397
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне из одну очень большую таблицу надо получить 3 разные таблицу

В 1-м таблице :

1-я 5 запис должна начинать с 1 (шаг=300)
1
301
601
901
1201

2-я 5 запис должна начинать с 2 (шаг=300)
2
302
602
902
1202

3-я 5 запис должна начинать с 2 (шаг=300)

3
303
603
903
1203
.....



2-я таблица :

1-я 5 запис должна начинать с 101 (шаг=300)
101
401
701
1001
1301

2-я 5 запис должна начинать с 102 (шаг=300)
102
402
702
1002
1302

3-я 5 запис должна начинать с 103 (шаг=300)

103
403
703
1003
1303
.....


3-я таблица:
1-я 5 запис должна начинать с 201 (шаг=300)
201
501
801
1101
1401

.....
...
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750423
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаг 300 для всего номера строки или 30 для старших цифр.
Запускать то пробовал ? :)
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750467
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шаг 300 для каждый 5 записей ,
1
301
601
901
1201
Это 1-й 5 запис.

2-я 5-ка:
2
302
602
902
1202

Тоесть , для 2-й 5-ку шаг тоже 300, но должно начинать с 2.
3-я 5-ка должно начинать с 3, шаг тоже 300
и т.д.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750544
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по моему запросу что получилось? Разве не так?
А если тебе только по 5 первых записей надо. то
Код: plaintext
1.
select Recno() as Row, mod(Recno(),  10 ) as Low, int(Recno() /  10 ) as High, ... from test order by  2 ,  3  having Low !=  0  and mod(High,  30 ) =  0  and High <  150 

1
301
601
901
1201
2
302
602
902
1202
3
303
603
903
1203
4
304
604
904
1204
5
305
605
905
1205
6
306
606
906
1206
7
307
607
907
1207
8
308
608
908
1208
9
309
609
909
1209
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750591
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мог бы и сам догадаться, что делать дальше. Если у тебя на каждом шаге ВСЕГДА отбирается только 5 записей, то и ставь соответствующее условие

SELECT TOP 5

Однако по твоему описанию, итоговая таблица будет содержать дубли. Ведь значение 301 будет взято на первом шаге и потом будет повторено, когда перейдем рубеж в 300 итераций. Но если очень надо, то делай вложенные циклы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
* Создаю структуру таблицы
SELECT BigTable
COPY STRUCTURE TO Tab1

* Наполнение таблицы
FOR m.lnJ= 1  TO Reccount("BigTable") STEP  300 
	FOR m.lnI= 1  TO  300 
		* Выборка во временную таблицу очередной порции данных
		SELECT TOP  5  ;
			Recno(), * ;
		FROM BigTable ;
		INTO CURSOR curTab ;
		WHERE MOD(Recno(), 300 )=m.lnI AND Recno()>= m.lnJ ;
		ORDER BY  1 

		* Копирование данных из очередной выборки в итоговую таблицу
		select Tab1
		APPEND FROM (DBF("curTab"))
	ENDFOR
ENDFOR

Правда, здесь предполагается, что количество записей в основной таблице кратно 300. Т.е. если в ней, например, всего 400 записей, то по 5 записей с шагом 300 никак не получится.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750645
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaT, то что надо если добавить .and High < 150
Только здесь как Вы показали в 1-м таблице получается только 45 записей
Последная 5-ка:
9
309
609
909
1209.
А остольные как выбрать , вот это незнаю.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750740
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11А остольные как выбрать , вот это незнаю.

Какие остальные?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750783
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, повтора не должна быть.
Вот мой код каторый я использую
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750811
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaT, последная 5-ка:
9
309
609
909
1209.
После это 5-ку таблица так должна продолжатся:
10
310
610
910
1210

11
311
611
911
1211
и т.д.

А остольные как выбрать , вот это незнаю.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33750924
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Нет, повтора не должна быть.
Вот мой код каторый я использую

Какая повтора? Где повтора? Повтора полей исходной таблицы? Допиши имена полей в ", ... from" вместо "..." через запятую.

Запускай word и делай проверку синтаксиса своих постов перед их отправкой. А то мы с тобой на разных русских языках говорим.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33751096
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11...
После это 5-ку таблица так должна продолжатся:
10
310
610
910
1210
...

Если в конечной выборке должны быть все записи кроме 300, 600, 900, 1200 то:
Код: plaintext
select Recno() as Row, mod(Recno(),  300 ) as Low, int(Recno() /  300 ) as High from test order by  2 ,  3  having Low !=  0  and High <  5 

Очень интересно для чего такая выборка нужна
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33751105
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, насчет повтора я не к Вам, это я Владимиру хотел сказать
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33751173
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это для отчета нужен .
Исходная таблица 1 и большая.
1
2
3

301
302
….

1000000

Просто я потом из 3 таблицу буду получать 1 таблица (для отчета)
Конечня таблица (или отчет) так должна выглядить:
1 101 201
301 401 501
601 701 801
901 1001 1101
1201 1301 1401
2 102 202
302 402 502
602 702 802
902 1002 1102
1202 1302 1402
……………………………….
……………………………….
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33751888
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select Recno() as Row, mod(Recno(), 10) as Low, int(Recno() / 10) as High from
t1 order by 2, 3 having Low != 0 and mod(High, 30) = 0 and High < 150

В этом коде как можно продолжит программы, чтобы остальные нужные записи тоже можно было получить?
10
310
910
610
1210
…..
Очень срочно нужен помогите, пожалуйста,
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33753117
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот создал такой код:
**********************
use ta
zap
for i=0 to 100
select Recno() as Row, mod(Recno(), 10) as Low, int(Recno() / 10) as High from t1 order by 2, 3 having Low != 0 and mod(High, 30) = i and High < 150;
into table ta1
clos data
use ta
appe from ta1
endf
**********************
*t1- исходная таблица.
1. Считает больше записи, НО , не получается считать 5-ку , начинающим
такие цифрами как 10,20,30,40,.....
2.Здесь считается и 5-ку , начинающи такие цифрами как 101,401,701,1001,1301,.....
201,501,801,1101,1401,….
Эти записи должно участвовать 2-м и 3-м таблице

Как можно решать и эти проблемы?


Дело в том что, мой 1-код (cap.prg) все правильно считает (все 3 таблицы),
олько очень долго работаеть
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как можно ускорить работы программы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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