Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
Имеется несколько таблиц связанных через Set Relation

Я пишу
Create Report Myrep From MainTable
Modify Report Myrep

Затем
Menu->Report->Insert Controls-Field
Вызываю Expression Builder, и там, где, как мне казалось, должны стоять поля всех связных таблиц, стоят только поля из таблицы MainTable.
А где же остальные, те которые связаные ?
28 апр 04, 16:20    [655077]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Наверно, базы данных не хватает...
28 апр 04, 17:04    [655266]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
А есть ли какая-нибудьь команда которая закидывает все открытае таблицы в базу данных ?
29 апр 04, 11:18    [656468]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Есть Project Manager.
Создайте в нём базу и включите в неё таблицы, затем установите в ней связи (Relation) между таблицами. Тогда Builder всё увидит и сделает правильно.
29 апр 04, 11:38    [656545]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
У меня немного другое.
Есть ListBox, в него загружается таблица, в которой имеются поля содержащие в себе : имена загружаемых отчетов, имена таблиц участвующих в связях с данной и, соответственно, имена полей по которым осуществляется связь. Поль-ль кликает на один из эл-тов ListBox'a - устанавливаются связи с таблицами и загружается сответствующий отчет для редактирования
Modify Report Myrep.

Как мне быть в этом случае, чтобы при редактировании отчета были видны все связи?
29 апр 04, 14:15    [657177]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
У вас неправильное понимание того, что такое связи в FoxPro. Почитайте здесь

http://www.foxclub.ru/kb/index.php?sid=35321&aktion=artikel&rubrik=004&id=103&lang=ru

Раздел "Связи и отношения между таблицами"

Для отчетов вам надо:

1) Обязательно настроить связи один-ко-многим
2) Установить главную таблицу

Это все можно сделать в DataEnvironment отчета. Ну, или программно, если очень надо.
29 апр 04, 20:40    [658258]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
http://www.foxclub.ru/kb/index.php?sid=35321&aktion=artikel&rubrik=004&id=103&lang=ru
В принципе, в противовес "постоянной связи" этот вид связи следовало бы назвать "временная связь". В том смысле, что данный тип связи устанавливается "по требованию". Т.е. вот надо мне в этом месте организовать связь, я тут же ее и организовываю, используя команду SET RELATION


http://www.foxclub.ru/kb/index.php?sid=35321&aktion=artikel&rubrik=004&id=103&lang=ru
Если таблицы имеют связь вида один-ко-многим, то для печати в отчете этих "многих" обязательно следует использовать команду SET SKIP TO


Может я чего-то недопонимаю, но именно эту связь я и имею в виду
30 апр 04, 10:54    [658903]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Что Вы подразумеваете под фразой

Как мне быть в этом случае, чтобы при редактировании отчета были видны все связи?


Что значит "видны"?
30 апр 04, 11:36    [659089]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
Что значит "видны"?

Имеется несколько таблиц связанных через Set Relation

Я пишу
Create Report Myrep From MainTable
Modify Report Myrep

Затем
Menu->Report->Insert Controls-Field
Вызываю Expression Builder, и там, где, как мне казалось, должны стоять поля всех связных таблиц, стоят только поля из таблицы MainTable.
А где же остальные, те которые связаные ?


Или, если просто отредактировать уже имеющийся отчет то таблиц вообще не будет.
30 апр 04, 11:49    [659141]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Таблицы-источники появляются в построителе выражений только если они включены в DataEnvironment отчета. Но Quick Report на это не рассчитан. Он берет только одну таблицу-источник в свой DataEnvironment.

Если бы отчет был объектом, то можно было бы программно добавить нужное количество курсоров как-то так:

rep.DataEnvironment.AddObject("Tab1","Cursor")

Однако созданный таким образом отчет - это НЕ объект. Поэтому остается использовать "хакерские" трюки

CREATE REPORT MyReport.frx FROM Tab1

USE MyReport.frx IN 0
LOCAL lcPropertis
lcPropertis = 'Alias = "Tab2"' +chr(13)+chr(10)+;
'Database = MyBase.dbc'+chr(13)+chr(10)+;
'CursorSource = "Tab2"'+chr(13)+chr(10)+;
'Name = "Cursor2"'

INSERT INTO MyReport (Platform, ObjType, Name, Expr) ;
VALUES ("WINDOWS",26,"cursor",m.lcPropertis)

USE IN MyReport
MODIFY REPORT MyReport.frx


По аналогии добавь объект Relation в DataEnvironment отчета. Какие именно значения нужны можешь посмотреть сначала вручную добавив нужные объекты в DataEnvironment отчета, а потом посмотрев содержимое полученного файла (отчет - это обычная таблица DBF, просто с измененным расширением)
30 апр 04, 12:33    [659369]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
Remans
Member

Откуда:
Сообщений: 101
To ВладимирМ
По аналогии с тем, что Вы мне говорили, пишу:
...
Create report Myreport.frx FROM Tab1
USE MyReport.frx IN 0
LOCAL lcPropertis
lcPropertis = 'Alias = "Tab2"' +chr(13)+chr(10)+;
'CursorSource = "Tab2"'+chr(13)+chr(10)+;
'Name = "Cursor2"'
  INSERT INTO MyReport (Platform, ObjType, Name, Expr) ;
  VALUES ("WINDOWS",26,"cursor",m.lcPropertis)

LOCAL lcPropertis
lcPropertis = 'Alias = "Tab3"' +chr(13)+chr(10)+;
'CursorSource = "Tab3"'+chr(13)+chr(10)+;
'Name = "Cursor3"'
  INSERT INTO MyReport (Platform, ObjType, Name, Expr) ;
  VALUES ("WINDOWS",26,"cursor",m.lcPropertis)

lcPropertis = 'ParentAlias = "Tab2"' +chr(13)+chr(10)+;
'RelationalExpr = "kod2"' +chr(13)+chr(10)+;
'ChildAlias = "Tab1"' +chr(13)+chr(10)+;
'ChildOrder = "kod1"' +chr(13)+chr(10)+;
'Name = "Relation1"'
  INSERT INTO myrep (Platform, ObjType, Name, Expr) ;
  VALUES ("WINDOWS",26,"relation",m.lcPropertis)

lcPropertis = 'ParentAlias = "Tab3"' +chr(13)+chr(10)+;
'RelationalExpr = "kod3"' +chr(13)+chr(10)+;
'ChildAlias = "Tab2"' +chr(13)+chr(10)+;
'ChildOrder = "kod2"' +chr(13)+chr(10)+;
'Name = "Relation2"'
  INSERT INTO myrep (Platform, ObjType, Name, Expr) ;
  VALUES ("WINDOWS",26,"relation",m.lcPropertis)

USE IN MyReport
MODIFY REPORT MyReport.frx

Fox выдает мне ошибку на MODIFY REPORT:
The ChildOrder property of a relation object in the data environment is no longer valid. The relation is being removed (Error 1478)
"Due to data environment changes, the relation of a ChildOrder property has been removed."
7 май 04, 14:05    [667859]     Ответить | Цитировать Сообщить модератору
 Re: Где связные таблицы ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ну, тут уже мог бы и сам догадаться. :)

Это сообщение об ошибке говорит о том, что в качестве ChildOrder ты указал несуществующее имя индексного тэга структурного индексного файла соответствующей таблицы.

Убедись в том, что для таблицы Tab1 есть структурный индексный файл и в этом файле есть тэг с именем kod1.

Соответственно, для таблицы Tab2 есть структурный индексный файл и в этом файле есть тэг с именем kod2.

Что такое структурный индексный файл и тэг объяснять надо?
7 май 04, 14:31    [667952]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить