:: Visual Foxpro, Foxpro for DOS
отчет и записи из двух курсоров
ProbaSP
Автор

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Всем привет!

Вот столкнулся для меня проблемой как вывести данные из двух курсоров в отчет.
Объединить курсоры в один не получится - разные структуры.
Хотелось бы вывести - сначала все записи одного затем (ниже например) все записи второго.
Если это элементарно, значит плохо искал. Ткните, пожалуйста, носом...
Если это невозможно (или очень сложно), то видимо буду смотреть в сторону выгрузки в excel.

FoxPro9.0 SP2

Спасибо.
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
SELECT
c1.f1,
c1.f2,
NULL AS f3,
NULL AS f4
FROM c1
UNION ALL
SELECT
NULL,
NULL,
c2.f3,
c2.f4
FROM c2
INTO CURSOR CurReport NOFILTER READWRITE
Только вместо NULL лучше подставить пустое значение нужной размерности (в первом подзапросе). Например SPACE(50) или CAST(0 AS N(15,2))



Исправлено 2 раз(а). Последнее : pasha_usue, 06.06.17 12:28
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
ProbaSP
Автор

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Спасибо.

Я так понимаю все таки можно объединить... хотел посмотреть как это будет выглядеть, НО

Эх, почему-то ошибка: SQL: Cannot determine data type of SQL column: Exp_1

попробую разобраться
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
PaulWist

Сообщений: 14625
Дата регистрации: 01.04.2004
Поиск по falsecursor, forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
SELECT
c1.f1,
c1.f2,
SPACE(50) AS f3,
000000000.00 AS f4
FROM c1
UNION ALL
SELECT
NULL,
NULL,
c2.f3,
c2.f4
FROM c2
INTO CURSOR CurReport NOFILTER READWRITE
В любом другом SQL мой запрос будет работать с NULL. А в FoxPro - нет. Надо в первом запросе задать тип и размерность для полей. Потому что когда фокс создаёт результирующий курсор, он смотрит на первую запись выборки, и по её результатам генерирует поля результирующего курсора.
Соответственно, если в первой записи фокс увидит NULL, он огорчится и не будет ничего делать.

А вот в Ms, Pg, Fbd, Oracle, Db2, Pervasive такой синтаксис проканает. В остальных не проверял.
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
PaulWist
Поиск по falsecursor, forum.foxclub.ru
Павел. FalseCursor он как бы в ширину. А здесь просьба в высоту. Нет, можно переделать идею с FalseCursor, индексировать по 1;2;3, а не по BOOLEAN.
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Не falsecursor это для новой фишки в 9-х отчётах Multiple detail band - только она предполагает что есть мастер-таблица и к ней подвязаны "детальные". А когда мастер-таблицы нет, тут то этот "странный курсор" и выручает.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
ProbaSP
Автор

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
pasha_usue
NULL я не использовал(в первом подзапросе), а SPACE(6), во 2 курсоре текстовое значение в 6 символов. НО ошибка...

SELECT cursor1.kol_shv, SPACE(6);
FROM cursor1;
UNION ALL;
SELECT null, cursor2.kr_naim_obor;
FROM cursor2;
INTO CURSOR CurReport NOFILTER READWRITE

буду экспериментировать....

Вопрос: а без объединения не как? 100%

да, мне нужно вертикальное расположение значений.
И между "курсорами" хотел вставить текст, типа "в том числе:" и т.д.

А если у меня получится объединить, то текст не вписать



Исправлено 2 раз(а). Последнее : ProbaSP, 07.06.17 07:56
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ProbaSP
Вот столкнулся для меня проблемой как вывести данные из двух курсоров в отчет.
Объединить курсоры в один не получится - разные структуры.
Хотелось бы вывести - сначала все записи одного затем (ниже например) все записи второго.
Если это элементарно, значит плохо искал. Ткните, пожалуйста, носом...

А почему бы элементарно не вывести в текстовый файл? Сначала из одного, потом дополнением из второго. Проблем вообще никаких.
При необходимости показа результата можно подгрузить вывод файла через блокнот или Wordpad, ну или тот же Word.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Мне не нравится, но можно так попробовать
SELECT cursor1.kol_shv, SPACE(6), 1 as ord;
FROM cursor1;
UNION ALL;
select sum(cursor1.kol_shv) as kol_shv,'Итого',2 as ord FROM cursor1;
UNION ALL;
SELECT CAST(0 AS N(10,2)), cursor2.kr_naim_obor;
FROM cursor2;
INTO CURSOR CurReport NOFILTER READWRITE


------------------
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ProbaSP
SELECT cursor1.kol_shv, SPACE(6) kr_naim_obor ;
FROM cursor1;
UNION ALL;
SELECT 00000 или CAST(NULL AS I), cursor2.kr_naim_obor ;
FROM cursor2;
INTO CURSOR CurReport NOFILTER READWRITE

Неплохо ЯВНО давать имена вычисляемым колонкам. А для UNION ALL стоит во всех частях давать поля строго определённого типа, а не "просто null" который в общем то не имеет SQL типа. Либо через CAST либо подбирая соответствующее "пустое значение" (скажем между 0 и 0000.0000 будет большая разница).
ProbaSP
Вопрос: а без объединения не как?
ДВА раза уже написали как. Используя вспомогательный курсор
ProbaSP
А если у меня получится объединить, то текст не вписать
Если и делают такого рода общий курсор, то В НЕГО и прописывают все "промежуточные тексты". Используя PrintWhen в наложенных друг на друга полях и служебные поля-признаки можно даже до некоторой степени "отформатировать" выводимые данные - к примеру те которые "заголовки" жирным или более крупным шрифтом выводить.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
ProbaSP
Автор

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Получилось... (разобрался)
Наконец-то увидел я как выглядит этот общий курсор.
ну в принципе пойдет.

Вот только с "промежуточные тексты" засада.

Подскажите, на примере, как в этом коде при объединении курсоров использовать PrintWhen?
и как вообще строчки вставит(поля).

SELECT cursor1.kol_shv, SPACE(6) kr_naim_obor ;
FROM cursor1;
UNION ALL;
CAST(NULL AS I), cursor2.kr_naim_obor ;
FROM cursor2;
INTO CURSOR CurReport NOFILTER READWRITE

Спасибо.


P.S.
Пока только придумал, создать 3-й курсор, в нем запись - "Итого" и объединил все 3 курсора, где "Итого" посередине.
Наверно проще можно...

CREATE CURSOR dop (itogo C(20))
Insert INTO dop (itogo) values ("Итого")
SELECT cursor1.kol_shv, SPACE(6) kr_naim_obor ;
FROM cursor1;
UNION ALL;
SELECT dop.itogo, SPACE(10);
FROM dop;
UNION ALL;
CAST(NULL AS I), cursor2.kr_naim_obor ;
FROM cursor2;
INTO CURSOR CurReport NOFILTER READWRITE



Исправлено 2 раз(а). Последнее : ProbaSP, 15.06.17 06:00
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
ProbaSP
Автор

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
С PrintWhen разобрался. (вот я тупанул... )
Со строчками тоже.

НО теперь в общем курсоре у меня много "0" (где нет значений из других курсоров).
Можно как-то избавится от нулей.(поля числовые)

хочется в PrintWhen вписать что-то типа:

IIF(kol_shv=0, ' ',"ни менять значение")

а вот как сделать, чтоб IIF действительно ни чего не сделал?
Спасибо.
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
IIF(kol_shv=0, ' ',kol_shv)
Это?


------------------
Ratings: 0 negative/0 positive
Re: отчет и записи из двух курсоров
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
ProbaSP
С PrintWhen разобрался. (вот я тупанул... )
Со строчками тоже.

НО теперь в общем курсоре у меня много "0" (где нет значений из других курсоров).
Можно как-то избавится от нулей.(поля числовые)
Внимательно изучить закладочку Format полей, куда выводятся эти нули. Обратить особое внимание на Blank if Zero при выставленном Numeric
Цитата:

хочется в PrintWhen вписать что-то типа:

IIF(kol_shv=0, ' ',"ни менять значение")

а вот как сделать, чтоб IIF действительно ни чего не сделал?
Спасибо.
НЕ НАДО сюда писать все подряд для решения всех проблем.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 31 (Гостей: 31)

© 2000-2024 Fox Club 
Яндекс.Метрика