Вставки / удаления таблицы соединений MS-Access между двумя взаимоисключающими списками (2 списка) - PullRequest
1 голос
/ 30 июля 2010

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

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

Таблица выглядит примерно так:

TABLE EmpExam 
(
  EmpID,
  ExamID
)

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

Мгновенные удаления / вставки не нужны, если они находятся в соответствующих поляхне нужно (они могут подождать, пока форма не будет закрыта).

Есть ли хороший / стандартный способ сделать это в Access?

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Зачем использовать списки, когда вам нужно добавлять элементы в таблицу с помощью кода, а затем удалять их с помощью кода?

Для того, что вы хотите сделать, подчиненная форма является обычным решением.Кроме того, вы можете использовать набор записей своей подчиненной формы.Обратите внимание, что вы, вероятно, должны иметь поле datetime в этой настройке.Кроме того, если ExamID уникален и каскадное удаление включено, удаление из основной таблицы приведет к удалению из подтаблицы.

0 голосов
/ 30 июля 2010

В итоге я использовал два списка с 1 кнопкой добавления и 1 кнопкой удаления, которые запускают их методы VBA On Click, которые выполняют сырой SQL.

Метод выглядит примерно так:

If IsNull(cboInEligible.Column(1))
  Exit Sub
End If

CurrentDB.Execute ("INSERT INTO tblEmpExam (ExamID, EmpID) " & _
                   "VALUES (" & ExamID & ", " & lstInEligible.Column(1) & ")")

lstInEligible.Requery
lstEligible.Requery

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

Два списка являются взаимоисключающими.

SELECT EmpID, EmpName
FROM Employee
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]);

txtExamID - это скрытый (но очевидный для дизайнера) элемент управления в форме, поскольку я не могуобратитесь к ExamID формы, кроме как через элемент управления или через абсолютное именование.

Другой список содержит EmpID IN вместо EmpID NOT IN, чтобы сделать его эксклюзивным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...