Foxpro, Связь многие-ко-многим

Тема в разделе "Остальные БД", создана пользователем Rommmm, 9 май 2010.

  1. Rommmm

    Rommmm Гость

    У меня есть таблица книг, таблица авторов, они связаны между собой отношением многие-ко-многим. Сделал промежуточную таблицу. Схема таблиц есть в прикрепленном файле. Проблема вот в чем:
    необходимо разместить на форме combobox для выбора книги, разместить grid, в котором будут отображаться авторы этих книг.
    У меня получается загружать в grid значения промежуточной таблицы, соответствующие выбранному значению в combobox, но ФИО авторов загрузить не получается... Помогите хоть кто-нибудь!!!!!!!
     

    Вложения:

    • 1111.JPG
      1111.JPG
      Размер файла:
      15 КБ
      Просмотров:
      34
  2. BOPOHA

    BOPOHA Well-Known Member

    Регистрация:
    26 апр 2006
    Сообщения:
    118
    Симпатии:
    0
    Если не расскажете или покажете, как вы делаете, то помочь никто не сможет.
     
  3. Rommmm

    Rommmm Гость

    Размещаю на форме Combo1. Через Builder связываю его с таблицей BOOK, возвращаемое значение pk_book, свойство BoundTo=.t.
    Размещаю Grid1, через билдер связываю его с AUTOR.
    Размещаю Grid2, через билдер связываю его с IDT3. Во вкладке Relationship ставлю для родителя book.pk_book, для дочерней таблицы pk_book.
    В Data Environment для таблиц ставлю order (для book - pk_book, для autor - pk_autor), пессимистическую буферизацию для строк.
    Когда запускаю форму и выбираю в комбобоксе книгу, в гриде2 выводятся первичные ключи авторов, соответствующих этой книге, т.е. нормально всё.
    Но в гриде1 только один автор отображается....

    p.s. сильно не ругайтесь, я начинающий... учусь...

    Добавлено: Ну я еще пробовал через командную строку, все получается... (здесь в примере выводятся авторы для книги с первичным ключом = 4)
    Но мне бы на формочку всё это и в таблицу....

    CLEAR all
    USE idt3 IN 0
    USE autor ORDER pk_autor IN 0
    SELECT idt3
    SET RELATION TO pk_autor INTO autor additive
    SET FILTER TO pk_book=4 IN idt3
    BROWSE FIELDS pk_book,autor.fio
    SET FILTER TO IN idt3
    set relation to
     
  4. Rommmm

    Rommmm Гость

    Разобрался с проблемой! Кому интересно пишу как делать:

    создаем 2 формы.
    на 1-й: размещаем combobox. Через Builder связываем его с таблицей Book, выбираем поля name_book, pk_book. Во вкладке Value устанавливаем pk_book. В свойствах combobox во вкладке data, в поле BoundTo ставим true. Затем выбираем View->Data Environment, у таблицы book ставим 2 в свойствах, в поле BufferModeOverride. Делаем кнопку "авторы", прописываем в click
    do form show_autor.
    на 2-й форме (show_autor): создаем сначала grid для промежуточной таблицы (idt3), помещаем поля pk_book, pk_autor. Затем делаем grid для autor, помещаем поле fio. Заходим в View->Data Environment, для таблиц ставим BufferModeOverride=2, для таблицы idt3 в поле Filter пишем idt3.pk_book=book.pk_book, для таблицы autor в filter пишем autor.pk_autor=idt3.pk_autor. Делаем первый grid незаметным, т.е. можно поместить его ниже второго грида, сделать нижнюю границу формы выше первого грида.

    Также можно делать фильтры при загрузке формы, например,
    SELECT idt3
    SET FILTER TO idt3.pk_book=book.pk_book
    SELECT autor
    SET FILTER TO autor.pk_autor=idt3.pk_autor
    GO TOP && для перемещения вверх в таблице, т.к. строки грида могут отобразиться некорректно.
    И чуть не забыл!!!! При выгрузке формы надо отменить фильтры:
    SELECT idt3
    SET FILTER TO
    SELECT autor
    SET FILTER TO

    Важно также заметить, что фильтр можно ставить любой, например: SET FILTER TO (idt3.pk_book=book.pk_book) and !deleted()
    будут выведены авторы книги, которые не помечены на удаление в таблице idt3.

    Спасибо за помощь!)
     
Загрузка...
Похожие Темы - Foxpro Связь многие
  1. serg24
    Ответов:
    1
    Просмотров:
    1.543
  2. jonnifox
    Ответов:
    1
    Просмотров:
    3.033
  3. LuMee
    Ответов:
    0
    Просмотров:
    2.375
  4. serox
    Ответов:
    3
    Просмотров:
    1.707
  5. morkov
    Ответов:
    1
    Просмотров:
    1.570

Поделиться этой страницей