Базовая настройка инвентаря с доступом
Так что я новичок, чтобы получить доступ и нуждаюсь в помощи для завершения моей базы данных инвентаризации
В настоящее время у меня есть следующие таблицы и поле в них: (Таблица: поля, первое поле является первичным ключом)
Предметы: № товара, Описание товара, Спецификация товара Уровень заказа, Кол-во для заказа, Кол-во в наличии
Materials_Used: ID(только поле Autonumber), Project, Item#, Amount
Проекты: Проект
Purchase_Orders: PONum, Дата получения
Receiving_Amount: ID(снова автонумерация), номер позиции, сумма, PONum
У меня проблемы в 2 областях:
Связывание в PONum с Предметами Receiving_Amount: В настоящее время у меня есть
Purchase_Orders
форма, которая просит пользователя ввестиdate
а такжеPOnum
и суб-форму Получения суммы в форме таблицы. Дело после того, как я ввожуdate
а такжеPONum
и перейдите к вводу полученных Элементов, которые я получаю, и введите значение параметра в поле Purchase_Orders.ID и Purchase_Orders.PONumber ------ Эта проблема решена благодаря Уэйну!Наличие Кол-во в наличии для того, чтобы таблица Предметов автоматически обновлялась при получении предмета через форму заказа на поставку (добавление к ней) и форму Использованных материалов (вычитание)
1 ответ
Поскольку вы будете работать в многопользовательской среде обновления, вам необходимо убедиться, что нет конфликтов с другими пользователями. Самый безопасный подход - это использовать СДЕЛКУ.
Затем вам нужно решить, как и когда вносить обновления в ваши две таблицы. Давайте перейдем к "Варианту 1", который должен иметь кнопку, которую пользователь нажимает, когда он закончил. Вам нужно будет вызвать следующую подпрограмму, когда они нажмут кнопку. Вы также должны отслеживать, вносил ли пользователь какие-либо изменения в подчиненную форму, но забыл нажать кнопку "Сохранить".
Тогда я настоятельно рекомендую отслеживать изменения, которые вы внесли. Например, пользователь вводит кол-во 5, сохраняет изменения. Завтра, смотрит на данные, видит 5 и хочет изменить его на 6... что приведет к повреждению истинного инвентаря. Один из способов предотвращения состоит в том, чтобы иметь "флаг" для позиций ПО, указывающий, что они были обработаны, и предотвращающий обновления снова.
Следующий код является просто примером... Я кодировал то, что, по моему мнению, должно быть входными и выходными наборами записей, но вам нужно убедиться, что для обработки выбраны правильные входные строки, а затем выбрать выходные строки для таблиц.,
Ищите комментарии с ## в них.... исправьте код, чтобы использовать ВАШИ имена элементов управления.
Дайте мне знать, если вам нужно больше объяснений.
Option Compare Database
Option Explicit
' BeginTrans, CommitTrans, Rollback Methods Example
' After the BeginTrans method starts a transaction that isolates all the changes made,
' the CommitTrans method saves the changes.
' Notice that you can use the Rollback method to undo changes that you saved using
' the Update method. Furthermore, the main transaction is nested within another transaction
' that automatically rolls back any changes made by the user during this example.
' One or more table pages remain locked while the user decides whether or not to accept the changes.
' For this reason, make sure you only execute the transaction on some event - don't allow a user
' to be interactive, else he may go to lunch and may lock pages someone else needs!
' Add to: Receiving_Amount: ID(again autonumber), Item#, Amount, PONum
' Subtract from: Materials_Used: ID(just an Autonumber field), Project, Item#, Amount
Sub BeginTransX_Update_Inventory()
On Error GoTo Error_trap
Dim wrkDefault As DAO.Workspace
Dim dbs As DAO.Database
Dim tblInput As DAO.recordSet
Dim tblItems As DAO.recordSet
'Dim tblMaterials As DAO.recordSet
' Get default Workspace.
Set wrkDefault = DBEngine.Workspaces(0)
Set dbs = CurrentDb
' ## Change the following line to use the name of the form control that has your PONum
Set tblInput = dbs.OpenRecordset("select * from MaterialsRec where PONum = " & Me.txtPONum & ";") '<<< This will be the source of your changes. Can use a query to filter exact rows.
' Start transaction.
wrkDefault.BeginTrans
Do While Not tblInput.EOF
Set tblItems = dbs.OpenRecordset("select * from [Items] where [Item#] = " & tblInput![item] & ";") ' <<< This will be where the updates are applied.
' Increase Qty on Hand
tblItems.Edit
tblItems![Qty on Hand] = tblItems![Qty on Hand] + tblInput!Amount
tblItems.Update
'## Add a text field named 'ProcStatus' to table MaterialsRec, or delete the following update ... your choice...
tblInput.Edit
tblInput!ProcStatus = "updated"
tblInput.Update
tblInput.MoveNext
Loop
' You can remove the following code if desired...
' Ask if the user wants to commit to all the changes made above.
If MsgBox("Save changes?", vbYesNo) = vbYes Then
wrkDefault.CommitTrans
Else
wrkDefault.Rollback
End If
tblInput.Close
tblItems.Close
'tblMaterials.Close
Set tblItems = Nothing
'Set tblMaterials = Nothing
Set dbs = Nothing
Set wrkDefault = Nothing
Exit Sub
Error_trap:
wrkDefault.Rollback
MsgBox "An error was encountered, but all changes were rolled back." & vbCrLf & _
"Err: " & Err.Number & vbCrLf & _
"Desc: " & Err.Description
End Sub