Ms access 具有访问权限的基本库存设置

Ms access 具有访问权限的基本库存设置,ms-access,ms-access-2007,inventory-management,Ms Access,Ms Access 2007,Inventory Management,因此,我是一个新手访问和需要帮助完成我的库存数据库 目前,我有以下表格和其中的字段: 表:字段,第一个字段是主键 项目:项目、项目描述、项目规格再订购级别、再订购数量、现有数量 使用的物料:ID仅自动编号字段、项目、项目、金额 项目:项目 采购订单:PONum,收到日期 接收金额:IDAGIN自动编号、项目、金额、PONum 我有两个方面的问题: 将PONum与项目接收金额绑定:目前我有一个采购订单表单,要求用户在数据表表单中输入日期和PONum以及接收金额的子表单。事情是在我输入日期和PONu

因此,我是一个新手访问和需要帮助完成我的库存数据库

目前,我有以下表格和其中的字段: 表:字段,第一个字段是主键

项目:项目、项目描述、项目规格再订购级别、再订购数量、现有数量

使用的物料:ID仅自动编号字段、项目、项目、金额

项目:项目

采购订单:PONum,收到日期

接收金额:IDAGIN自动编号、项目、金额、PONum

我有两个方面的问题:

将PONum与项目接收金额绑定:目前我有一个采购订单表单,要求用户在数据表表单中输入日期和PONum以及接收金额的子表单。事情是在我输入日期和PONum之后,然后向下输入我收到的物品,并输入参数值框Purchase_Orders.ID和Purchase_Orders.PONumber ---多亏了韦恩,这个问题才得以解决

一旦通过采购订单表单接收到一个项目,将其添加到现有数量表中,并从订单表单中减去使用的材料,则项目表的现有数量将自动更新


由于您将在多用户更新环境中工作,因此需要确保与其他用户没有冲突。最安全的方法是使用事务

接下来,您需要决定如何以及何时对两个表进行更新。让我们来看看“选项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

上面的表和字段定义不正确,或者参数值输入错误。您可以显示“采购订单”表和一些字段,但在收到订单金额后有一个冒号。采购订单中是否有名为“ID”的字段?至于更新,我建议点击按钮,强制运行一些vba代码来更新数量和使用的材料。上面的采购订单表不正确,我只是编辑以反映它。对于采购订单,没有一个名为ID的字段,只有PONum和接收日期。对于更新,我一直在考虑,但不太确定如何为其编写代码,我知道需要将该值传递到Items表下的正确行您的“问题1”是由于主窗体和子窗体之间的链接或查询中的字段名错误造成的。。。没有“ID”字段。。。在没有看到完整语法的情况下,您可能想使用PONum?至于“问题2”,您的子表单用于什么?用户是否键入采购订单中每个项目的接收数量?如果是这样,我可以提供一些vba代码来更新相关的表。我刚刚修复了我的第一个问题。我最终用一个不同的名字和新的表单重新创建了这个表,你知道它的工作原理是什么吗。。。它通过收到的适当采购订单跟踪项目。现在我只需要更新现有数量的帮助。是的,Wayne,你知道我的想法了,子表单就在那里,用户可以输入在特定订单下收到的项目。因此,基本上一旦输入了项目,我希望它添加到项目表下的现有数量是的,我需要更多的解释,看起来我必须创建3个查询,对吗?第一个选择导致更改的原因,但接下来的两个查询我无法确定其应该是什么请回答每个问题:1我假设您的子表单已绑定到采购订单的行项目记录集?2用户是否可以更新一个或多个行项目中的数量?3您需要更新另外两个表以添加和减去数量?4表格项目与采购订单的关系如何?我看不到匹配的钥匙?5您的表单有以下键:PONum、ReceivedDate、Item和AMT qty?。在我的示例中,“输入查询”将为您正在处理的采购订单选择行项目。不知道如何从“使用的物料”中检索行,我被卡住了..1:是的,对于输入的每个编号的采购订单,可以有多个项目。因此,在Purchased_order表中,您可以看到与该PO2相关联的这些项目的所有项目数量。是的,3。接收金额表将添加到项目上的特定项目中
表和使用的材料将从同一表中减去。4.项目表与采购订单无关,其目的是通过查询生成一个报告,以了解特定项目中使用了多少每种材料。5.对于所使用的材料,我使用项目将其与项目表关联。我会开始和你聊天,这样我就可以给你发一个链接到我的访问数据库,但我要允许兰克迪你对1的解释不正确。您的表“采购订单”没有行项目。您真的是说行项目位于相关表“收货金额”中吗?该表是唯一具有将链接回采购订单表的采购订单的其他表。然后对于3,你想更新“使用的材料”,但我无法理解它们之间的关系。请解释一下。