Я создаю систему ведения сообщений/задач, которая регистрирует входящие сообщения и назначает задачи на их основе.Запись данных субподформы MS Access
В моей базе данных есть система примечаний, чтобы пользователи могли делать заметки о различных вещах - например, в записи клиента может быть заметка, в которой говорится: «Этот клиент всегда заказывает собственное стекло из оконной рамы». Все это обрабатывается с помощью одной таблицы «Примечания», которая имеет PrimaryNoteTableID
, которая ссылается на статическую таблицу поиска, которая идентифицирует основную таблицу, к которой относится примечание, и поле PrimaryTablePK
, которое хранит PK записи в этой таблице, которая применяется к ,
Во избежание коррупции рекомендуется хранить поля memo в собственной таблице с соотношением 1: 1 к их родительской таблице (see here), что я и сделал.
При добавлении новых сообщений и задач, пользователь, как правило, хотят, чтобы добавить следующее:
- Информация о человеке, сообщение является с.
- Предмет сообщения.
- Тип требуемого действия и крайний срок для этого действия.
- записку с подробностями того, что было обсуждено и т.д.
Имея это в виду, у меня есть:
tblCommTaskLog
с полями CommDate
, ActionRequiredTypeID(FK)
, ActionDeadlineDays
, CommAccountID(FK)
и т.д.
tblNote
с : NoteID(PK)
, PrimaryNoteTableID(FK)
, PrimaryTablePK(FK)
, EnteredByUserID(FK)
, EntryDate
.
tblNoteText
с NoteTextID(PK)
, NoteID(FK)
, NoteText(Memo)
Некоторые из них являются внешними ключами к другим таблицам, которые должны быть понятны.
По существу, у меня возникают проблемы с формой для ввода этих трех таблиц. Я считаю, что обработка Доступа подформа может быть довольно глупо, так что:
- Вы заперты в отображая вещи определенным образом, если вы хотите использовать подчиненный или подчиненный из подчиненных.
- Доступ сохраняет записи до того, как вы нажали, чтобы сохранить. Он также сохраняет записи в подформатах, которые не могут обрабатываться простым «me.undo» в коде формы и приводят к тому, что вам нужно найти запись в подформе и удалить ее с помощью кода.
- Подформы действуют глупыми способами, поскольку они назначают автономерам PK и выбирают их в ссылках между дочерними и основными формами.
Я хотел бы просто иметь поля из tblCommTaskLog
и NoteText
поля на одной форме, так что пользователь заполняет в деталях от tblCommTaskLog
(ActionRequired и т.д.) И текстовая заметка, попадает на кнопку «Сохранить», а затем с помощью кода детали сохранены правильно, так что:
- Новая запись создается в
tblCommTaskLog
с, например, a PK72
(Autonumber). - Новая запись создается в
tblNote
сPrimaryNoteTableID
из4
что соответствуетtblCommTaskLog
, вPrimaryTablePK
из72
и PKNoteID
например,422
(Автономный номер). - Новая запись создается в
tblNoteText
сNoteID
из 422.
Я думаю, что мне нужно, это главная форма с полями из tblCommTask
с несвязанной текстовое поле, чтобы взять вход для NoteText
. Я просто не могу понять, как создать новую запись в tblNote
, получить AutonumberPK из этого поля и вставить ее в FK tblNoteText
, чтобы все было правильно связано с правильными FK. Могу ли я сделать это с помощью SQL INSERT, а затем SELECT TOP в поле Autonumber? Будет ли я лучше делать это с помощью Recordsets и Lastmodified? Есть ли другой метод, о котором я не думаю?
Сколько у вас первичных таблиц? почему бы вам не использовать таблицы заметок для каждого из ваших [клиентов, пользователей, xxx, asdb] таким образом, чтобы вы могли применять простые отношения 1: m? –
В настоящее время существует 11 таблиц, в которых будут храниться примечания. Я решил, что это лучший способ сделать что-то [здесь] (http://stackoverflow.com/questions/25992670/notes-system-in-database). – WhatEvil
Я не храню заметки (тип memo) в своей таблице и не страдал от коррумпированных баз данных за многие годы. Существуют и другие вещи, которые гораздо важнее, такие как разделение FE/BE. – Fionnuala