powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с памятью в VFP
3 сообщений из 28, страница 2 из 2
Проблемы с памятью в VFP
    #35740610
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите код вашей функции FirstSup()
...
Рейтинг: 0 / 0
Проблемы с памятью в VFP
    #35740927
_Tania_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PROC FirstSup
PARAMETERS n
PRIVATE a
SELECT MIN(fd70) FROM regi_fd WHERE fd02=n INTO ARRAY a
RETURN a[1]
ENDPROC

Функция здесь ни при чем. Запускала запрос без нее.
...
Рейтинг: 0 / 0
Проблемы с памятью в VFP
    #35741565
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последовательно выполнять запрос не пробовали? Не один большой, а несколько маленьких.

Если в результирующей выборке должно быть всего несколько сот записей, то можно сначала получить эту маленькую выборку, а потом уточнять. Ну, примерно так

Код: 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.
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.
71.
72.
73.
74.
75.
* Определение минимального значения
LOCAL min70 
SELECT MIN(fd70) FROM regi_fd WHERE fd02= 47298  INTO ARRAY min70

* или через вызов функции
* min70 = FirstSup( 47298 )

* Запрос по таблице-посреднику regi_fb
select
	regi_fb.fb02,
	regi_fb.fb12,
	refi_fb.fb71
from 
	regi_fb
where 	
	regi_fb.fb02 =  47298 
into cursor res_fb

* Запрос по таблице regi_fd
select
	fd08,
	fd08,
	fd12,
	fd12,
	fd13,
	fd13,
	fd13,
	fd14,
	fd18,
	fd18,
	fd19,
	fd20,
	fd23,
	fd24,
	fd24,
	fd70
from 
	regi_fd
where 	
	regi_fd.fd02 =  47298 
into cursor res_fd


* Итоговый запрос
select
	aa01,
	fd08,
	fd08,
	fd12,
	fd12,
	fd13,
	fd13,
	fd13,
	fd14,
	fd18,
	fd18,
	fd19,
	fd20,
	fd23,
	fd24,
	fd24,
	fd70
from 
	regi_aa, 
	res_fd, 
	res_fb
where 	
	regi_aa.aa70 = res_fb.fd71
	and 
	(
		inlist(res_fb.fb12, 5 , 6 , 7 ) and res_fd.fd70 = min70[ 1 ]
		or 
		inlist(res_fb.fb12, 1 , 9 )
	)
into cursor sqlresult

Здесь проблема в том, что связь между таблицами regi_fb и regi_fd не однозначная. Т.е. не один-к-одному. И даже не много-ко-многим. А нечто среднее между много-ко-многим и декартовым произведением.

===========================================================

Возможно, может помочь менее радикальное решение, если вместо связки по полю f02 явно указать значение этого поля для обеих таблиц.

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
* Определение минимального значения
LOCAL min70 
SELECT MIN(fd70) FROM regi_fd WHERE fd02= 47298  INTO ARRAY min70

* или через вызов функции
* min70 = FirstSup( 47298 )

select
	aa01,
	fd08,
	fd08,
	fd12,
	fd12,
	fd13,
	fd13,
	fd13,
	fd14,
	fd18,
	fd18,
	fd19,
	fd20,
	fd23,
	fd24,
	fd24,
	fd70
from 
	regi_aa, 
	regi_fd, 
	regi_fb
where 	
	regi_aa.aa70 = refi_fb.fb71

	and regi_fd.fd02 =  47298 
	and regi_fb.fb02 =  47298 

	and 
	(
		inlist(regi_fb.fb12, 5 , 6 , 7 ) and regi_fd.fd70 = min70  
		or 
		inlist(regi_fb.fb12, 1 , 9 )
	)
into cursor sqlresult

Т.е. не связь regi_fd.fd02 = regi_fb.fb02 с дополнительным фильтром по одной таблице, а прямой фильтр на обе таблицы
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблемы с памятью в VFP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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