Конференция "Начинающим" » ADO ACCESS связанные таблицы просмотр инфо [D7]
 
  • linox (10.06.10 15:55) [0]
    Добрый день. У меня есть такой вопрос:
    Есть база данных в Access (Библиотека). В бизе 2-е таблицы связанные между собой (книги и посетители). Подключаю базу к проге.
    На форме єсть DBGrid в которм отображается список книг. И нужно добавить кнопку, когда ее нажимаеш должно выводить фамилию посетителя с таблицы "Посетители" у которго находится книга (на которой стоит указатель в DBGrid). И как это сделать?
    Я дела так:

    showmessage('У посетителя находится книга: '+datasource2.DataSet.FieldValues['nazva']); - в таком случае
    выдает одно и тоже значение для разных книг.
  • Sergey13 © (10.06.10 16:18) [1]
    > [0] linox   (10.06.10 15:55)

    > когда ее нажимаеш должно выводить фамилию посетителя с таблицы "Посетители"
    > Я дела так: showmessage('У посетителя находится книга: '+datasource2.DataSet.FieldValues['nazva'])

    Нужно одно, а делаешь другое. Странно по крайней мере.

    > выдает одно и тоже значение для разных книг.

    Значит у тебя ошибка в 17-ой строке.
  • linox (10.06.10 17:13) [2]
    тоесть да... ноборот
    в списке с посетителями .. нужно чтобы выводило книгу
  • Sergey13 © (10.06.10 17:44) [3]
    > [2] linox   (10.06.10 17:13)

    Значит мало того, что
    > В бизе 2-е таблицы связанные между собой
    надо еще и в программе их связать. Читай про мастер-детальное соединение.
  • Anatoly Podgoretsky © (10.06.10 19:19) [4]
    > linox  (10.06.2010 15:55:00)  [0]

    Используй соединение.
  • linox (11.06.10 00:10) [5]
    А можно поподробней.. какой компонент использовать?
  • можно все те же DBGridы для отображения
  • Плохиш © (11.06.10 10:32) [7]

    > linox   (11.06.10 00:10) [5]
    >
    > А можно поподробней.. какой компонент использовать?

    Те же, что и сейчас, просто надо справку по ним прочитать.
  • linox (11.06.10 11:58) [8]
    про справку понятно.... просто интересно как правильно организовать связь... для правильного отображения
  • Плохиш © (11.06.10 12:27) [9]
    select <требуемые поля из таблицы книги>, <фамилия посетителя>
    from <таблица книги>
    left join <таблица посетители> on <критерий посетитель имеет книгу>


    и достаточно одного TADODataSet. Поле <фамилия посетителя> можно показывать в гриде или не показывать на усмотрение пользователя.
  • linox (11.06.10 12:55) [10]
    on <критерий посетитель имеет книгу> - можно сдесь поподробней?
  • 12 © (11.06.10 13:43) [11]
    неправильно

    надо 3 таблицы

    <таблица книги>
    idbook
    namebook

    <таблица посетители>
    iduser
    nameuser

    <таблица посетители-книги>
    id
    iduser
    idbook

    select <требуемые поля из таблицы книги>, <фамилия посетителя>
    from <таблица книги>
    left join <таблица посетители-книги> on <таблица книги>.idbook = <таблица посетители-книги>.idbook
    left join <таблица посетители> on <таблица посетители>.iduser = <таблица посетители-книги>.iduser

    но в A так писать геморно, поэтому все
    left join
    переписываем на
    where
      <таблица книги>.idbook = <таблица посетители-книги>.idbook
      and <таблица посетители>.iduser = <таблица посетители-книги>.iduser
  • Anatoly Podgoretsky © (11.06.10 13:43) [12]
    > Плохиш  (11.06.2010 12:27:09)  [9]

    Может быть не LEFT, а INNER JOIN
    И в связи не "имеет книгу", это в WHERE, a.id=b.id
  • Anatoly Podgoretsky © (11.06.10 13:55) [13]
    > 12  (11.06.2010 13:43:11)  [11]

    Так правильно, отношение многие ко многом обязательны для библиотеки.
  • Плохиш © (11.06.10 14:23) [14]

    > linox   (11.06.10 12:55) [10]
    >
    > on <критерий посетитель имеет книгу> - можно сдесь поподробней?
    >

    Это твоё домашнее задание

    > 12 ©   (11.06.10 13:43) [11]


    > <таблица посетители-книги>
    > id
    > iduser
    > idbook

    А смысл? Книга не может быть выдана одновременно больше чем одному посетителю.

    > Anatoly Podgoretsky ©   (11.06.10 13:43) [12]
    >
    > > Плохиш  (11.06.2010 12:27:09)  [9]
    >
    > Может быть не LEFT, а INNER JOIN

    Так ему, вроде, не только выданные книги показывать надо.
  • Anatoly Podgoretsky © (11.06.10 14:38) [15]
    > Плохиш  (11.06.2010 14:23:14)  [14]

    Книга может быть выдана более чем одному посетителю, посколько обычно более
    одного экземпляра.
  • Плохиш © (11.06.10 15:02) [16]

    > Anatoly Podgoretsky ©   (11.06.10 14:38) [15]

    Вот блин, об этом как-то сразу не подумал.
 
Конференция "Начинающим" » ADO ACCESS связанные таблицы просмотр инфо [D7]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]