Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ленточные формы / 18 сообщений из 18, страница 1 из 1
13.04.2004, 00:39
    #32478319
Ленточные формы
Есть таблицы:
1) persons (id, name)
2) projects (id, name)
3) projects_persons_link (project_id, person_id)

Если персона прикреплена к проекту - такая запись есть в projects_persons_link

Вопрос:
как сделать форму в которой при выборе проекта (т.е. есть некий m_project_id)
в подчиенной форме выдается список всех персон - и справа от каждой есть галочка
(если запись с таким person_id есть в projects_persons_link - то галочка отмечена, иначе - не отмечена)
...
Рейтинг: 0 / 0
13.04.2004, 00:53
    #32478328
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
select persons.*, not isnull(projects_persons_link.project_id) as XXX
from persons left join [select * from projects_persons_link where projects_persons_link.project_id=...]. as pp on persons.id=pp.person_id
...
Рейтинг: 0 / 0
13.04.2004, 00:56
    #32478329
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Вопрос:
как сделать форму в которой при выборе проекта (т.е. есть некий m_project_id)
в подчиенной форме выдается список всех персон - и справа от каждой есть галочка
(если запись с таким person_id есть в projects_persons_link - то галочка отмечена, иначе - не отмечена)

Код: plaintext
1.
2.
3.
4.
5.
private sub ПолеВыбораПроекта_AfterUpdate()
  me.mysubform.form.recordsource= "select *, "  & _
          "(select top 1  true from projects_persons_link as p where p.person_id=persons.person_id)" & _
          " from persons "  & _
          "where project_id="  & nz(ПолеВыбораПроекта, 0 )
end sub


Примерно так. Правда я не знаю, обновляемый ли получиться запрос такой. Если нет, надо поиграться с джойнами, видами запроса, distinct'ами и т.д.

Если "выбор проекта" - это не смена значения поля, а листание записей главной формы, то такой запрос без последнего where надо положить в источник данных подчиненной формы и настроить их синхронизацию через св-ва "основное/подчиненное поле".
...
Рейтинг: 0 / 0
13.04.2004, 01:01
    #32478335
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
авторПравда я не знаю, обновляемый ли получиться запрос такой. Если нет, надо
Вот так точно обновляемый будет, хоть я и опоздал :)

me.mysubform.form.recordsource="select *, " & _
"dlookup(""true"",""projects_persons_link"",""person_id="" & persons.person_id) as f " & _
"from persons " & _
"where project_id=" & nz(ПолеВыбораПроекта,0)
...
Рейтинг: 0 / 0
13.04.2004, 01:03
    #32478337
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Я не думаю, что тут обязательно нужен обновляемый запрос. Ведь все равно для его обновления надо добавить запись в таблицу линков, а это надо делать не через этот запрос.
...
Рейтинг: 0 / 0
13.04.2004, 01:36
    #32478357
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Мой вариант (что-то я не смог реализовать предыдущие)

SELECT persons.name, IIf([project_id]=[forms]![formName]![cboProject],-1,0) AS [Участие]
FROM persons LEFT JOIN projects_persons_link ON persons.id = projects_persons_link.person_id;
...
Рейтинг: 0 / 0
13.04.2004, 01:38
    #32478359
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
В этом варианте вроде надо добавить group by?
...
Рейтинг: 0 / 0
13.04.2004, 01:50
    #32478365
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
авторВ этом варианте вроде надо добавить group by?
Может быть, только я пока не пойму, зачем?
...
Рейтинг: 0 / 0
13.04.2004, 01:51
    #32478366
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Вроде проверил, вроде работает...
...
Рейтинг: 0 / 0
13.04.2004, 01:55
    #32478369
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Если в таблице projects_persons_link какая-то персона фигурирует несколько раз с разными проектами, то запрос так и выдаст ее несколько раз. Я ошибаюсь?
...
Рейтинг: 0 / 0
13.04.2004, 01:59
    #32478370
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
авторЯ ошибаюсь?[
Нет, ошибся я
...
Рейтинг: 0 / 0
13.04.2004, 02:22
    #32478382
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Почти вариант Geo (только он там, мне кажется, чуток напутал)
SELECT persons.name, DCount("*","[projects_persons_link]","person_id=" & [id] & " And [project_id]=" & [forms]![formname]![cboProject])>0 AS [Участие]
FROM persons;
...
Рейтинг: 0 / 0
13.04.2004, 12:38
    #32478882
dead1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
У меня похожая проблема. Сейчас сделал примерно тоже, так где совпадения нет, там 0. А где есть совпадение - #Error. Как с этим можно побороться?

SELECT Таблица1.id, IIF(Таблица2.id > 0,-1,0) as checkfound
FROM Таблица1 LEFT JOIN tempPG ON Таблица1.id = tempPG.id
WHERE Таблица1.buv_id = '4900087586'
...
Рейтинг: 0 / 0
13.04.2004, 12:42
    #32478892
dead1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
tempPG = Таблица2
...
Рейтинг: 0 / 0
13.04.2004, 13:50
    #32479090
N_A
N_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
Вот необновляемый, но красивый, по моему мнению, вариант:
SELECT persons.*, Exists (SELECT * FROM projects_persons_link WHERE person_id=id and project_id=[m_project_id]) AS Galochka
FROM persons;
...
Рейтинг: 0 / 0
13.04.2004, 14:20
    #32479171
Ленточные формы
Мне нужно сделать так, чтобы можно было проставить галочки, а потом пройтись по этому Recordset'у чтобы сделать необходимые INSERT'ы или DELET'ы
в projects_persons_link
как это возможно сделать ?
может создавать временную таблицу, а потом проходиться по ней ? (вроде довольно кривой вариант)
...
Рейтинг: 0 / 0
13.04.2004, 15:35
    #32479361
N_A
N_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ленточные формы
1.Добавь в таблицу persons (и в форму) поле типа "флажек"(для отметки выбора).
2.После ввода пользователем нового m_project_id, обновляй флажки исползуя клон рекордсета формы или запрос на обновление.
3.На событие после обновления для формы (persons ) повесь код удаляющий или добавляющий записи в projects_persons_link (можно сделать и отдельной кнопкой для всех записей persons).

п.с.
Подумай о списках с "несвязанным выделением", или об очень удобном методе выбора путем перекидывания из одного списка в другой,реализованный во многих мастерах Access.
Вместо отдельной таблицы, и доп поля можно использовать связку массив ID + функция в запросе от ID возвращающая истину или ложь, в зависимости от наличия аргумента в массиве.
...
Рейтинг: 0 / 0
13.04.2004, 16:51
    #32479610
Ленточные формы
всем большое спасибо за участие

2N_A :
особенное спасибо, делаю так как вы сказали (сделал в persons логические поля)

---------------------------------------
С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ленточные формы / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]