powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как можно ускорить работы программы?
50 сообщений из 50, показаны все 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
как можно ускорить работы программы?
    #33754457
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11select 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
…..
Очень срочно нужен помогите, пожалуйста,
Я же уже написал как 10 и прочее получить. Вот твои три таблицы:
Код: plaintext
1.
2.
3.
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 
select Recno() as Row, mod((Recno() -  100 ),  300 ) as Low, int(Recno() /  300 ) as High from test order by  2 ,  3  having Low !=  0  and High <  5 
select Recno() as Row, mod((Recno() -  200 ),  300 ) as Low, int(Recno() /  300 ) as High from test order by  2 ,  3  having Low !=  0  and High <  5 
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33754666
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только опять повторы получается, например,
1
301
....
и в 1-м таблице и в 3-м таблице встречается.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33756345
rashidnuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для ускорения выборки следует все поля по которым идет фильтрация предварительно проиндексировать, но устанавливать на него set order to вовсе необязательно, ускорение будет в разы быстрее.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33759926
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я только выяснил, что у меня тоже повторы есть.
Чтобы повторы не было я должен в цикле

for i =1 to 100
k=i+300
j=i+600
s=i+900
y=i+1200

z=i+100
x=i+400
c=i+700
v=i+1000
u=i+1300


f=i+200
g=i+500
h=i+800
t=i+1100
o=i+1400
……..
endf

второй раз
for i =1501 to 100
,,,,,
endf
записать и т. д. или еще 1 (вложенный) for поставить?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33759988
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaT, еще вопрос:
У меня в исходным таблице 1000000 записи, но запрос дает мне только
в каждом таблице 1495 записи. А все остальные записи как выбрать?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33761086
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот мои 3 таблицы, который в каждом 500 (?!) записи и без повтора (исрользуя запросы DimaT):
select Recno() as Row, mod(Recno(), 300) as Low, int(Recno() / 300) as High from t1 order by 2, 3 having Low != 0 and High < 5 and low<=100

select Recno() as Row, mod(Recno(), 300) as Low, int(Recno() / 300) as High from t1 order by 2, 3 having Low != 0 and High < 5 and low>100 and low<=200

select Recno() as Row, mod(Recno(), 300) as Low, int(Recno() / 300) as High from t1 order by 2, 3 having Low != 0 and High < 5 and low>200 and low<=300

Меня сейчас интересует остальные записи (в исходным таблице больще 1000000 записи) как получат?
Помогите, пожалуйста, а то у меня ни как не получатся.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33762277
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или я так обяснияю что ни кто не понимаеть меня, или не хочет помочь мне.
Я так думаю что, это не очень трудная задяча для программистов ( я всего 3 месяц работаю с foxpro)
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33762289
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я так обяснияю что ни кто не понимаеть меня
Боюсь, что именно так. По крайней мере я ничего не понял из того, что же тебе нужно.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33762441
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую объяснить.
Есть исходная таблица (T1.DBF- записи больше 1000000), здесь поле N -номер записи (recno()).
Хочу получать конечную таблицу (CAP.DBF)
Использую программы CAP.PRG. Получаю 3 таблицы, потом обяденияю эти 3 таблицы с помощи запроса. Получается CAP.DBF.
Здесь поле N_A,N_B,N_C - тоже самый N в таблице T1.dbf.
ВОПРОС:
1.Программа (CAP.PRG) очень долго работает, хочу ускорить работы программы.
2.Если продолжить программы (i>100) в T1.DBF повторы получается.
Здесь повторы не должно быть.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33762552
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Или я так обяснияю что ни кто не понимаеть меня, или не хочет помочь мне.
Я так думаю что, это не очень трудная задяча для программистов ( я всего 3 месяц работаю с foxpro)
Вообще-то, я уже объяснил (и не только я), но реакция оказалась неадекватная. Вместо того, чтобы попытаться понять как именно работает приведенный пример кода либо вообще никакой реакции не следует, либо следует заявления, что код работает неправильно.

Задача действительно не сложная, но кто ее должен решать? Если это нужно Вам, то Вы и решайте. Здесь Вам дали несколько возможных вариантов решения. Доводить их "до ума" - это уже исключительно Ваша задача. Никто за Вас ее решать не будет.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33762710
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМПравда, здесь предполагается, что количество записей в основной таблице кратно 300. Т.е. если в ней, например, всего 400 записей, то по 5 записей с шагом 300 никак не получится.

Да ,несколько варианты предлогали.
VladimirM, в Вашем варианте вот это проблемы я ни как не мог решать, у меня
записи меняется, сегодня 1200000 может быть, завтра 1333333 и т. д.
Вариант Dima T:
Очень быстро работает, но здесь тоже не могу получать записи recno()>1500,
тоесть повторы получается.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33765765
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что эта функция делаеть: !=
Я в help ничего не нащел об этом?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33765788
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Что эта функция делаеть: !=
Я в help ничего не нашел об этом?
В ANSI она заменяется на <> (не равно)
С уважением, Алексей.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766086
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11... Меня сейчас интересует остальные записи (в исходным таблице больще 1000000 записи) как получат?
Помогите, пожалуйста, а то у меня ни как не получатся.

1. Про проверку орфографии в word`е я уже тебе говорил.
2. Никто похоже не в состоянии понять смысл того, чем ты занимаешься. Сложно давать советы непонимая какого результата хочет достичь человек.
Ты тут просишь помочь тебе решить какую-то задачу, и не удосуживаешься описать полностью, то чем ты занимаешься.
Ты сам для себя решил, что ты все моменты решения твоей задачи знаешь, кроме построение этого хитрого списка. Если обратил внимание на другие посты, то люди задавая вопрос, описывают что делают, что сделали и что не получается. Вполне реально что тебе предложат другое решение всей проблемы без использования твоего хитрого алгоритма сортировки записей.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766251
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaT, я не хорошо знаю русский язык, поетому не сильно ругайте меня за это.
Моя задача только в том что, построить этого хитрого списка. А потом буду получать report из
этой базы. В каждом странице reporta должна 15 запись поместиться: 5 строка и 3 столбец .

1-я страница отчета:
1 101 201
301 401 501
601 701 801
901 1001 1101
1201 1301 1401

2-я страница отчета:
2 102 202
302 402 502
602 702 802
902 1002 1102
1202 1302 1402


Потом 1-й 100 страницы этого отчета положить друг на друга и будить резать бумаги и на 1-м стопке получим подрядные номера:
1, 2, 3,……100
101,102,103,…..200
201, 202, 203 ,….300
301,302,303,…….400
401, 402, 403, ….. 500
……………………….
1401, 1402, 1403, ….1500


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


fuad11А потом буду получать report из
этой базы. В каждом странице reporta должна 15 запись поместиться: 5 строка и 3 столбец .


А чем тебя не устраивает стандартное разбиение отчета на столбцы фоксом?
В отчете меню File -> Page Setup
Ставишь columns: 3
spacing - расстояние между колонками

Это то что тебе надо?
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже не это. Не дочитал до конца. :(
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766678
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стандартное разбиение отчета - это не то, что мне надо.
Потому что у меня исходная таблица вот по такому порядку идет (по recno())
1
2
3
4
5
...
...
1000000

А в reporte мне нужен по такому порядку:

1-я страница отчета:
1 , 101, 201
301, 401, 501
601, 701, 801
901, 1001, 1101
1201, 1301, 1401

2-я страница отчета:
2, 102, 202
302, 402, 502
602, 702, 802
902, 1002, 1102
1202, 1302, 1402

Поетому, хочу сначало переобразовать таблицы в удобные формы для отчета.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766699
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Потом 1-й 100 страницы этого отчета положить друг на друга и будить резать бумаги и на 1-м стопке получим подрядные номера:
1, 2, 3,……100
101,102,103,…..200
201, 202, 203 ,….300
301,302,303,…….400
401, 402, 403, ….. 500
……………………….
1401, 1402, 1403, ….1500


Вот мой результать, который я хочут достичь .


Но в таком случае у тебя заранее задано: 15 элементов на листе и 100 листов.
всего 1500 будет вырезано 15 стопок по 100 листов.
1501 в твою схему не укладывается, т.к. он должен быть 16 элементом (стопкой) а у тебя их 15 на лист входит.
Как я понял, перед разрезанием 100 листов отделяется и режется? Потом следующие 100?
А не проще из большой таблицы снача взять 1500 записей, напечатать отчет, потом следующие 1500 и т.д.?
Хотя и это можно обсчитать.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766768
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Но в таком случае у тебя заранее задано: 15 элементов на листе и 100 листов.
всего 1500 будет вырезано 15 стопок по 100 листов.
1501 в твою схему не укладывается, т.к. он должен быть 16 элементом (стопкой) а у тебя их 15 на лист входит.
Как я понял, перед разрезанием 100 листов отделяется и режется? Потом следующие 100?

DimaT, да, именнно так.


1501 в мою схему не укладывается, эти будеть уже 16-я стопка
Еще 15 стопок от 1501 до 3000 и т. д.
Вот именно эта часть не могу понять как делать.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766893
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По месту расположения номер записи вычисляется следующим образом:
Номер записи = ((Стопка * 5 + Строка) * 3 + Столбец) * 100 + Лист + 1
Где Стопка, Строка, Столбец, Лист нумеруются от 0
+ 1 потому что записи в таблице нумеруются с 1

Обратным способом все разбираем и сортируем:
Код: plaintext
1.
select recno() as nRecNo, mod(recno() -  1 ,  100 ) as nList, mod(int((recno() -  1 ) /  100 ),  3 ) as nStolb, mod(int((recno() -  1 ) /  100  /  3 ),  5 ) as nStroka, int((recno() -  1 ) /  100  /  3  /  5 ) as nStopka from test order by  5 ,  2 ,  3 ,  4 
Результат можно вывести из одной таблицы в отчет с 3 колонками
если же надо 3 таблицы то добавь having nStolb = 0 для 1-го столбца, 1 для 2-го и 2 для 3-го
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766913
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Dima, сейчас буду посмотреть.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766939
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima , у меня результат этого запроса пустую таблицу дают, или я что-то не так делаю.
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766944
fuad11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извените, я чего-то перепутал
...
Рейтинг: 0 / 0
как можно ускорить работы программы?
    #33766970
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fuad11Dima , у меня результат этого запроса пустую таблицу дают, или я что-то не так делаю.

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


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