Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADO ACCESS связанные таблицы просмотр инфо [D7]


linox ©   (2010-06-10 15:55:00) 

Добрый день. У меня есть такой вопрос:
Есть база данных в Access (Библиотека). В бизе 2-е таблицы связанные между собой (книги и посетители). Подключаю базу к проге.
На форме єсть DBGrid в которм отображается список книг. И нужно добавить кнопку, когда ее нажимаеш должно выводить фамилию посетителя с таблицы "Посетители" у которго находится книга (на которой стоит указатель в DBGrid). И как это сделать?
Я дела так:

showmessage('У посетителя находится книга: '+datasource2.DataSet.FieldValues['nazva']); - в таком случае
выдает одно и тоже значение для разных книг.


Плохиш   (2010-06-11 15:02:00) [1]


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

Вот блин, об этом как-то сразу не подумал.


Anatoly Podgoretsky   (2010-06-11 14:38:00) [2]

> Плохиш  (11.06.2010 14:23:14)  [14]

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


Плохиш   (2010-06-11 14:23:00) [3]


> 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   (2010-06-11 13:55:00) [4]

> 12  (11.06.2010 13:43:11)  [11]

Так правильно, отношение многие ко многом обязательны для библиотеки.


12   (2010-06-11 13:43:00) [5]

неправильно

надо 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   (2010-06-11 13:43:00) [6]

> Плохиш  (11.06.2010 12:27:09)  [9]

Может быть не LEFT, а INNER JOIN
И в связи не "имеет книгу", это в WHERE, a.id=b.id


linox   (2010-06-11 12:55:00) [7]

on <критерий посетитель имеет книгу> - можно сдесь поподробней?


Плохиш   (2010-06-11 12:27:00) [8]

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

и достаточно одного TADODataSet. Поле <фамилия посетителя> можно показывать в гриде или не показывать на усмотрение пользователя.


linox   (2010-06-11 11:58:00) [9]

про справку понятно.... просто интересно как правильно организовать связь... для правильного отображения


Плохиш   (2010-06-11 10:32:00) [10]


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

Те же, что и сейчас, просто надо справку по ним прочитать.


Виталий Панасенко(дом)   (2010-06-11 09:51:00) [11]

можно все те же DBGridы для отображения


linox   (2010-06-11 00:10:00) [12]

А можно поподробней.. какой компонент использовать?


Anatoly Podgoretsky   (2010-06-10 19:19:00) [13]

> linox  (10.06.2010 15:55:00)  [0]

Используй соединение.


Sergey13   (2010-06-10 17:44:00) [14]

> [2] linox   (10.06.10 17:13)

Значит мало того, что
> В бизе 2-е таблицы связанные между собой
надо еще и в программе их связать. Читай про мастер-детальное соединение.


linox   (2010-06-10 17:13:00) [15]

тоесть да... ноборот
в списке с посетителями .. нужно чтобы выводило книгу


Sergey13   (2010-06-10 16:18:00) [16]

> [0] linox   (10.06.10 15:55)

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

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

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

Значит у тебя ошибка в 17-ой строке.


Наверх

Титульная страница Поиск, карта сайта Написать письмо