Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / цикл по таблице / 10 сообщений из 10, страница 1 из 1
05.10.2015, 14:15
    #39068428
t
t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
Добрый день.
Имеется таблица с одним полем и следующими записями:
№1
№2
№3
№4
№5
Необходимо все записи вывести на форму одной строкой
№1,№2,№3,№4,№5

Понимаю, что надо применять цикл SCAN ENDSCAN по таблице и записывать все в одну переменную, но не соображу до конца как
...
Рейтинг: 0 / 0
05.10.2015, 15:27
    #39068517
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
Код: sql
1.
2.
3.
4.
5.
select table
i=''
scan
   i=i+','+alltr(field)
endscan


если надо без начальной запятой, то:
Код: sql
1.
SUBSTRC(i,2)


вернет все символы начиная со 2-ого левого.
...
Рейтинг: 0 / 0
06.10.2015, 09:19
    #39068991
t
t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
T1gRa_NT,спасибо.
А если немного усложнить и добавить условие по второму столбцу

Имеется таблица с двумя полями и следующими записями:
№1 книга
№2 журнал
№3 журнал
№4 книга
№5 тетрадь
№6 книга
Необходимо все записи вывести на форму одной строкой учитывая одинаковые записи второго столбца
книга №1,№4,№6
журнал №2,№3
тетрадь №5

Я не могу понять как делать сравнения записей второго столбца.
Это пример условный, чтобы понять логику. На практике у меня большая таблица с большим количеством записей.
...
Рейтинг: 0 / 0
06.10.2015, 09:44
    #39069021
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
tT1gRa_NT,спасибо.
А если немного усложнить и добавить условие по второму столбцу

Имеется таблица с двумя полями и следующими записями:
№1 книга
№2 журнал
№3 журнал
№4 книга
№5 тетрадь
№6 книга
Необходимо все записи вывести на форму одной строкой учитывая одинаковые записи второго столбца
книга №1,№4,№6
журнал №2,№3
тетрадь №5

Я не могу понять как делать сравнения записей второго столбца.
Это пример условный, чтобы понять логику. На практике у меня большая таблица с большим количеством записей.

Код: sql
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.
create cursor tt (tt_id i, pp_id i)
insert into tt values (1, 1)
insert into tt values (1, 2)
insert into tt values (1, 3)
insert into tt values (2, 4)
insert into tt values (2, 5)
create cursor pp (pp_id i, value c(10))
insert into pp values (1, 'раз')
insert into pp values (2, 'два')
insert into pp values (3, 'три')
insert into pp values (4, 'четыре')
insert into pp values (5, 'пять')

select t1.tt_id, ff(t1.tt_id)   ;
	from tt t1 					;
	group by t1.tt_id
	
	
function ff
lparameters tnId
local lcResult, lcValue
select value ;
	from pp t1 ;
		inner join tt t2 on t1.pp_id=t2.pp_id and t2.tt_id = tnId ;
	into array laArr
lcResult = ""
for each lcValue in laArr
	lcResult = lcResult + iif(!empty(lcResult),",","") + alltrim(lcValue)
endfor
return 	lcResult
...
Рейтинг: 0 / 0
06.10.2015, 10:26
    #39069060
t
t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
PaulWist,
как все сложно
...
Рейтинг: 0 / 0
07.10.2015, 05:45
    #39070035
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
как бы сделал я..., могут быть ошибки в синтаксисе(ну и заменить кирилицу на латиницу)... главное алгоритм...:-)
close tables
use моя_табл
index on второй_столб to моя_табл
select второй_столб from моя_табл group by второй_столб into cursor времен_табл
делаем цикл по этой времен_табл
go top && для перестраховки
do while !eof()
per_второй_столб=второй_столб
select моя_табл
SET KEY TO per_второй_столб && можно и set filtert но эта команда быстрее..
* Далее тот цикл, который вам привели
i=''
scan
i=i+','+alltr(первый_столб)
endscan
SUBSTRC(i,2)

*Тут выводим результат
? per_второй_столб," ",i
select времен_табл
skip
enddo
close tables
use
Этот код конечно медленнее, на какие-то наносекунды приведённого селекта... но может так будет понятнее..:-)
...
Рейтинг: 0 / 0
07.10.2015, 09:19
    #39070121
t
t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
q1w1e1,
так действительно понятнее, спасибо
...
Рейтинг: 0 / 0
07.10.2015, 09:25
    #39070130
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
А напомните, работает ли ограничение на 255 символов в переменной?
Ведь переменная являться строковой.
...
Рейтинг: 0 / 0
07.10.2015, 09:37
    #39070151
t
t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
T1gRa_NT, в конечной итоговой строке максимум будет символов 50 не более
...
Рейтинг: 0 / 0
07.10.2015, 09:44
    #39070174
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
цикл по таблице
T1gRa_NTА напомните, работает ли ограничение на 255 символов в переменной?
Ведь переменная являться строковой.
Размер поля максимум 254 символа. Для переменной - 16 Мб.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / цикл по таблице / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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