-
Добрый день. У меня есть такой вопрос:
Есть база данных в Access (Библиотека). В бизе 2-е таблицы связанные между собой (книги и посетители). Подключаю базу к проге.
На форме єсть DBGrid в которм отображается список книг. И нужно добавить кнопку, когда ее нажимаеш должно выводить фамилию посетителя с таблицы "Посетители" у которго находится книга (на которой стоит указатель в DBGrid). И как это сделать?
Я дела так:
showmessage('У посетителя находится книга: '+datasource2.DataSet.FieldValues['nazva']); - в таком случае
выдает одно и тоже значение для разных книг.
-
> [0] linox (10.06.10 15:55)
> когда ее нажимаеш должно выводить фамилию посетителя с таблицы "Посетители"
> Я дела так: showmessage('У посетителя находится книга: '+datasource2.DataSet.FieldValues['nazva'])
Нужно одно, а делаешь другое. Странно по крайней мере.
> выдает одно и тоже значение для разных книг.
Значит у тебя ошибка в 17-ой строке.
-
тоесть да... ноборот
в списке с посетителями .. нужно чтобы выводило книгу
-
> [2] linox (10.06.10 17:13)
Значит мало того, что
> В бизе 2-е таблицы связанные между собой
надо еще и в программе их связать. Читай про мастер-детальное соединение.
-
> linox (10.06.2010 15:55:00) [0]
Используй соединение.
-
А можно поподробней.. какой компонент использовать?
-
можно все те же DBGridы для отображения
-
> linox (11.06.10 00:10) [5]
>
> А можно поподробней.. какой компонент использовать?
Те же, что и сейчас, просто надо справку по ним прочитать.
-
про справку понятно.... просто интересно как правильно организовать связь... для правильного отображения
-
select <требуемые поля из таблицы книги>, <фамилия посетителя>
from <таблица книги>
left join <таблица посетители> on <критерий посетитель имеет книгу>
и достаточно одного TADODataSet. Поле <фамилия посетителя> можно показывать в гриде или не показывать на усмотрение пользователя.
-
on <критерий посетитель имеет книгу> - можно сдесь поподробней?
-
неправильно
надо 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
-
> Плохиш (11.06.2010 12:27:09) [9]
Может быть не LEFT, а INNER JOIN
И в связи не "имеет книгу", это в WHERE, a.id=b.id
-
> 12 (11.06.2010 13:43:11) [11]
Так правильно, отношение многие ко многом обязательны для библиотеки.
-
> 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
Так ему, вроде, не только выданные книги показывать надо.
-
> Плохиш (11.06.2010 14:23:14) [14]
Книга может быть выдана более чем одному посетителю, посколько обычно более
одного экземпляра.
-
> Anatoly Podgoretsky © (11.06.10 14:38) [15]
Вот блин, об этом как-то сразу не подумал.