Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формирование ОТЧЕТА??????!!!!! / 12 сообщений из 12, страница 1 из 1
18.06.2009, 11:53
    #36047904
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
Добрый день, у меня такой вопрос:
При построении отчета делается выборка из нескольких таблиц, затем создаются две временные Table1 и Table2, при простом запуске формы и печати отчета все работает нормально, таблицы создаются, отчет просматривается. НО! когда создается экзешник и вызывается та же форма уже из проги все вроде бы работает, за исключением одного момента, при вызове отчета вываливается следующая ошибка: "Возможность поддерживается только для таблиц .DBC" хотя сами таблицы на диске создаются, но к самой базе они не подключаются и выподает следующее окно прикрепленный рисунок...
Вот код:
Код: 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.
PROCEDURE CreateTempTable
CREATE TABLE ('DATA\Table1');
   (IDtable1 i PRIMARY KEY AUTOINC,A i, B V( 40 ), C i, D i, E i, F V( 100 ), G V( 50 ), H V( 100 ),;
    I V( 100 ), J V( 50 ), K V( 150 ), L V( 100 ), M V( 25 ), N V( 25 ), O V( 50 ), P i)

CREATE TABLE ('DATA\Table2');
   (IDtable i AUTOINC, IDtable1 i, A C( 30 ), B i, C i, D i, E i,;
    FOREIGN KEY IDtable1 TAG IDtable1 REFERENCES Table1)

SELECT Edition.editionid, Edition.tirag, Edition.kolspolos, Edition.sqpolos, Period.period, Format.format, Ascent.ascent,;
  Publishinghouse.housename, Publishinghouse.site,Publishinghouse.adres, Contactface.fullname,;
  Contactface.workphone, Contactface.personalphone, Contactface.email;
 FROM data!ascent ;
    INNER JOIN data!edition ON  Ascent.ascentid = Edition.ascentid ;
    INNER JOIN data!period  ON  Period.periodid = Edition.periodid ;
    INNER JOIN data!format  ON  Format.formatid = Edition.formatid ;
    INNER JOIN data!publishinghouse ON  Publishinghouse.publhouseid = Edition.publhouseid ;
    INNER JOIN data!contactface ON  Contactface.faceid = Publishinghouse.faceid;
 WHERE  Edition.name = press_name INTO CURSOR cursPress

SELECT Descmodule.squaremodule FROM data!descmodule INNER JOIN data!tabmodule ;
ON  Descmodule.descid = Tabmodule.descid WHERE  Tabmodule.editionid = cursPress.editionid;
ORDER BY Descmodule.squaremodule INTO CURSOR id_edition
min_modul = id_edition.squaremodule
SCAN
	min_modul = MIN(min_modul, id_edition.squaremodule)
ENDSCAN

INSERT INTO Table1(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P);
	VALUES (cursPress.editionid, press_name, cursPress.tirag, cursPress.kolspolos, cursPress.sqpolos, ;
			cursPress.period, cursPress.format, cursPress.ascent, cursPress.housename, ;
			cursPress.site, cursPress.adres, cursPress.fullname, cursPress.workphone, ;
			cursPress.personalphone, cursPress.email, min_modul)

SELECT Modules.modul, Descmodule.height, Descmodule.width,; && описание модулей
  Descmodule.squaremodule, Descmodule.cost;
 FROM data!edition ;
    INNER JOIN data!tabmodule  ON  Edition.editionid = Tabmodule.editionid ;
    INNER JOIN data!descmodule ON  Descmodule.descid = Tabmodule.descid ;
    INNER JOIN data!modules    ON  Modules.modulid = Tabmodule.modulid;
 WHERE  Edition.name = press_name INTO CURSOR cursPress2
FOR i= 1  TO RECCOUNT("cursPress2")
	SELECT cursPress2
	SCAN RECORD i
		INSERT INTO Table2(IDtable1, A, B, C, D, E);
		VALUES(Table1.IDtable1,cursPress2.modul, cursPress2.height, cursPress2.width, cursPress2.squaremodule, cursPress2.cost)
	ENDSCAN
ENDFOR

REPORT FORM ('REPORTS\InfoPress') PREVIEW

SELECT Table2
USE
DROP TABLE Table2

SELECT Table1
USE
DROP TABLE Table1

ENDPROC
...
Рейтинг: 0 / 0
18.06.2009, 12:17
    #36047978
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
xX_Clubber_Xx,

1. А что вам мешает использовать временные курсоры, заместо временных таблиц?

2. И объясните мне смысл этой конструкции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FOR i= 1  TO RECCOUNT("cursPress2")
	SELECT cursPress2
	SCAN RECORD i
		INSERT INTO Table2(IDtable1, A, B, C, D, E);
		VALUES(Table1.IDtable1,cursPress2.modul, cursPress2.height, cursPress2.width, cursPress2.squaremodule, cursPress2.cost)
	ENDSCAN
ENDFOR
Как-нибудь так не работает?
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT cursPress2
SCAN
	INSERT INTO Table2(IDtable1, A, B, C, D, E);
	VALUES(Table1.IDtable1,cursPress2.modul, cursPress2.height, cursPress2.width, cursPress2.squaremodule, cursPress2.cost)
	SELECT cursPress2
ENDSCAN
...
Рейтинг: 0 / 0
18.06.2009, 12:17
    #36047980
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
Добавьте опцию FREE в команду CREATE TABLE.

Код: plaintext
CREATE TABLE ('DATA\Table1') FREE (...)

А вообще, не надо создавать таблицы. Создавайте курсоры (временные таблицы). Синтаксис практичоски тот же самый, только вместо ключевого слова TABLE используется ключевое слово CURSOR

Код: plaintext
CREATE CURSOR curReport (...)
...
Рейтинг: 0 / 0
18.06.2009, 12:20
    #36047992
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
xX_Clubber_Xx,

И еще... А зачем так сложно?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT Descmodule.squaremodule FROM data!descmodule INNER JOIN data!tabmodule ;
ON  Descmodule.descid = Tabmodule.descid WHERE  Tabmodule.editionid = cursPress.editionid;
ORDER BY Descmodule.squaremodule INTO CURSOR id_edition
min_modul = id_edition.squaremodule
SCAN
	min_modul = MIN(min_modul, id_edition.squaremodule)
ENDSCAN

Может быть что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
SELECT MIN(Descmodule.squaremodule) FROM data!descmodule INNER JOIN data!tabmodule ;
ON  Descmodule.descid = Tabmodule.descid WHERE  Tabmodule.editionid = cursPress.editionid;
ORDER BY Descmodule.squaremodule INTO ARRAY laResult

min_modul = laResult[ 1 ]
...
Рейтинг: 0 / 0
18.06.2009, 12:24
    #36048007
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
а как потом курсор скормить отчету???
чтобы получить такую шляпу:
...
Рейтинг: 0 / 0
18.06.2009, 12:26
    #36048019
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
я не гений в Foxe, я его тока учу
...
Рейтинг: 0 / 0
18.06.2009, 12:31
    #36048033
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
xX_Clubber_Xxа как потом курсор скормить отчету Просто назвать курсоры так же, как временные таблицы назывались, и всё - даже менять ничего в отчёте не придётся (если там DE нету).
...
Рейтинг: 0 / 0
18.06.2009, 12:32
    #36048035
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
xX_Clubber_Xxа как потом курсор скормить отчету???
Точно также, как и таблицу. Просто не надо включать курсор в DataEnvironment отчета (да это и невозможно). В DataEnvironment отчета вообще ничего не должно быть. Та таблица (курсор), которая будет открыта в текущей рабочей области и станет источником данных для отчета

Код: plaintext
1.
2.
select curReport
REPORT FORM MyReport.frx
...
Рейтинг: 0 / 0
18.06.2009, 12:32
    #36048036
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
что такое DE???? (ссори за тупость я не понимаю)
...
Рейтинг: 0 / 0
18.06.2009, 12:45
    #36048079
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
Спасибо! Правда я терь не понимаю, почему он продублировал одну и ту же запись столько раз, тогда как он должен был вывести 4-и разных записи!!!!
...
Рейтинг: 0 / 0
18.06.2009, 12:49
    #36048094
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
xX_Clubber_XxСпасибо! Правда я терь не понимаю, почему он продублировал одну и ту же запись столько раз, тогда как он должен был вывести 4-и разных записи!!!!
Просто вы строите отчет по одной рабочей области, а перед REPORT FORM выбрана другая рабочая область.
SELECT нужная_рабочая_область
REPORT FORM
...
Рейтинг: 0 / 0
18.06.2009, 13:01
    #36048142
xX_Clubber_Xx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование ОТЧЕТА??????!!!!!
всем большое спс!!! Я во всем разобрался, все работает!!! Еще раз огромное СПС!!! )))
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Формирование ОТЧЕТА??????!!!!! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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