Базовая настройка инвентаря с доступом

Так что я новичок, чтобы получить доступ и нуждаюсь в помощи для завершения моей базы данных инвентаризации

В настоящее время у меня есть следующие таблицы и поле в них: (Таблица: поля, первое поле является первичным ключом)

Предметы: № товара, Описание товара, Спецификация товара Уровень заказа, Кол-во для заказа, Кол-во в наличии

Materials_Used: ID(только поле Autonumber), Project, Item#, Amount

Проекты: Проект

Purchase_Orders: PONum, Дата получения

Receiving_Amount: ID(снова автонумерация), номер позиции, сумма, PONum

У меня проблемы в 2 областях:

  1. Связывание в PONum с Предметами Receiving_Amount: В настоящее время у меня есть Purchase_Orders форма, которая просит пользователя ввести date а также POnum и суб-форму Получения суммы в форме таблицы. Дело после того, как я ввожу date а также PONumи перейдите к вводу полученных Элементов, которые я получаю, и введите значение параметра в поле Purchase_Orders.ID и Purchase_Orders.PONumber ------ Эта проблема решена благодаря Уэйну!

  2. Наличие Кол-во в наличии для того, чтобы таблица Предметов автоматически обновлялась при получении предмета через форму заказа на поставку (добавление к ней) и форму Использованных материалов (вычитание)

Связь с базой данных

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
Другие вопросы по тегам