Выборка данных и вывод на табличную форму

grey.karapetyan
Дата: 01.11.2009 19:26:57
Есть 3 таблички:

Клиент
client_id(PK), счетчик
familiya
imya
otchestvo
...

Услуги
service_id(PK), счетчик
service_name (название услуги)

Встреча
reception_id(PK), счетчик
client(FK)
service_id(FK)
reception_start (дата, время)
reception_end (дата, время)

связь 1 к многим. То есть в таблице "Встреча" может быть много одинаковых Клиентов

Есть отвязанная "Табличная форма".

1)В "Табличной форме", в виде "Поля со списком" пользователь должен выбрать строку из полей familiya, imya, otchestvo таблицы "Клиент".

2)таким же образом пользователь должен выбрать
одну строку из столбца service_id таблицы "Услуги"

3)И вручную должен внести данные в поля reception_start, reception_end таблицы "Встреча".

Вопросы:
Как это реализовать?
ну и насколько я не прав:

1.Я должен сделать запрос:
SELECT familiya, imya, otchestvo FROM client
Далее я как-то(Как?) должен подсунуть результат этого запроса в 3 "Поля со списком" находящихся на табличной форме.

Но как для всех 3 сделать одинаковый источник данных, чтобы при выборе пользователем "familiya"
имя и отчество подставлялись автоматически.
То есть:
при указании фамилии "Иванов"
должны остаться:
Иванов Иван Иванович
Иванов Алексей Алексеевич

далее указав имя -
остался только один.
grey.karapetyan
Дата: 01.11.2009 19:31:57
UPD ошибся
2)таким же образом пользователь должен выбрать
одну строку из столбца service_name таблицы "Услуги"
П-Л
Дата: 02.11.2009 08:27:36
Есть простые шаблоны реализации схемы звезда.

Сначала надо сделать источник данных - запрос - в котором соединить таблицу фактов встречи со справочниками клиенты и услуги. В запросе должны быть все поля из таблицы фактов и поля справочников кроме PK.

На основе этого запроса сделать табличную форму.

Полю client_id(FK) дать подпись Фамилия и сделать комбобоксом, чтобы он показывал либо список склеенных в одну строчку ФИО либо Ф И О тремя столбиками (по вкусу). Поля И и О - обычные текстбоксы. Тогда при выборе из списка любого значения будут "заполняться" все поля Ф И О.

Аналогично для поля service_id(FK).

Я бы сделал форму-контейнер, в ней табличную форму по описанному рецепту, а над ней - всякие фильтры по услугам, клиентам, периодам времени. Строчку мгновенного поиска. Фильтры по клиентам и услугам можно связать через LinkMaster|ChildFields, тогда при вводе новых записей меньше надо будет заполнять.
ga
Дата: 03.11.2009 20:37:51
Чё значит "Полю client_id(FK) дать подпись Фамилия". Можеш уточнить?
подпись
Дата: 04.11.2009 08:06:56
ga
Чё значит "Полю client_id(FK) дать подпись Фамилия". Можеш уточнить?


подпись = лейбл/капшион/заголовок поля
ga
Дата: 05.11.2009 10:10:30
У меня табличка с адресами. Улицы через внешний ключ вынесены в отдельную табличку. Хочется выводить адреса в табличную форму. Можно как нибудь реализовать просмотр/добавление новых адресов через табличную не используя VB. Чтоб при этом улицы в таблице с улицами не дублировались?
`
Дата: 05.11.2009 12:32:00
ga,

насколько знаю - без ВБА - ничего не выйдет
если преодолеете "боязнь ВБА", то поиск по NotInList даст готовое решение
grey.karapetyan
Дата: 06.11.2009 20:46:42
П-Л,
автор
Сначала надо сделать источник данных - запрос - в котором соединить таблицу фактов встречи со справочниками клиенты и услуги. В запросе должны быть все поля из таблицы фактов и поля справочников кроме PK.


Подскажите пожалуйста, как соединять, например, таблицу Встреч с справочником Клиенты?

-Если я буду использовать
LEFT JOIN Клиент ON Клиент.client_id=Встреча.client_id
Результирующая таблица будет пустой.
И последующее нацеливание формы(компонента "Поле со списком") на пустую таблицу не даст возможность выбора клиентов для создания записи в таблице "Встреча".

-Если я буду использовать RIGHT JOIN результирующая таблица будет содержать в себе всех клиентов. Что тоже неправильно.

=====
Может нужно поместить на форму-контейнер несколько табличных форм.
1-Клиенты
2-Услуги
3-Встреча

в 1 пользователь выбирает одну из записей
в 2 пользователь выбирает одну из записей
в 3 при вводе данных выполняется проверка, что записи в 1 и 2 выбраны; Записываются FK выбранных записей в 3-тю таблицу и вручную вносятся данные в оставшиеся поля 3-ей таблицы?
grey.karapetyan
Дата: 06.11.2009 21:10:43
Можно ли сделать так:
Табличная форма использующая несколько источников данных
для первых 4 полей - запрос из таблицы "Клиент"
для следующих двух - запрос из таблицы "Услуги"
оставшиеся 2 вносит вручную
(таблица "Встреча" поля reception_start (дата, время) reception_end (дата, время) )


Пользователь работая с этой формой
- для первых 4 полей из выпадающего списка выбирает клиента.
- для следующих двух выбирает услугу
- в оставшиеся поля вводит данные ручками

затем по завершению выбора\ввода данных.

Из табличной формы берутся данные
Клиент.client_id
Услуги.service_id
Встреча.Reception_start
Встреча.Reception_end

и записываются в таблицу Встреча
В виде:
reception_id (создается автоматически т.к. это счетчик)
client_id
service_id
reception_start
reception_end
П-Л
Дата: 07.11.2009 19:49:40
автор
Можно ли сделать так:
Табличная форма использующая несколько источников данных
для первых 4 полей - запрос из таблицы "Клиент"
для следующих двух - запрос из таблицы "Услуги"
оставшиеся 2 вносит вручную
(таблица "Встреча" поля reception_start (дата, время) reception_end (дата, время) )


Вы неправильно поняли идеологию работы с запросами. Желание соединить данные из нескольких таблиц правильное, но буквально то что вы написали неверно с точностью до наоборот.

Вы строите общий запрос, в котором соединяете основную таблицу данных со справочниками. Форма может и должна использовать этот единый общий запрос, соединяющий данные из разных таблиц - это и есть основное средство моделирования сложных объектов на формах.

Форма, основанная на таком запросе, будет работать именно так как вам требуется:

автор
Пользователь работая с этой формой
- для первых 4 полей из выпадающего списка выбирает клиента.
- для следующих двух выбирает услугу
- в оставшиеся поля вводит данные ручками

затем по завершению выбора\ввода данных.

Из табличной формы берутся данные
Клиент.client_id
Услуги.service_id
Встреча.Reception_start
Встреча.Reception_end

и записываются в таблицу Встреча
В виде:
reception_id (создается автоматически т.к. это счетчик)
client_id
service_id
reception_start
reception_end