Ms access 具有访问权限的基本库存设置
因此,我是一个新手访问和需要帮助完成我的库存数据库 目前,我有以下表格和其中的字段: 表:字段,第一个字段是主键 项目:项目、项目描述、项目规格再订购级别、再订购数量、现有数量 使用的物料:ID仅自动编号字段、项目、项目、金额 项目:项目 采购订单:PONum,收到日期 接收金额:IDAGIN自动编号、项目、金额、PONum 我有两个方面的问题: 将PONum与项目接收金额绑定:目前我有一个采购订单表单,要求用户在数据表表单中输入日期和PONum以及接收金额的子表单。事情是在我输入日期和PONum之后,然后向下输入我收到的物品,并输入参数值框Purchase_Orders.ID和Purchase_Orders.PONumber ---多亏了韦恩,这个问题才得以解决 一旦通过采购订单表单接收到一个项目,将其添加到现有数量表中,并从订单表单中减去使用的材料,则项目表的现有数量将自动更新Ms access 具有访问权限的基本库存设置,ms-access,ms-access-2007,inventory-management,Ms Access,Ms Access 2007,Inventory Management,因此,我是一个新手访问和需要帮助完成我的库存数据库 目前,我有以下表格和其中的字段: 表:字段,第一个字段是主键 项目:项目、项目描述、项目规格再订购级别、再订购数量、现有数量 使用的物料:ID仅自动编号字段、项目、项目、金额 项目:项目 采购订单:PONum,收到日期 接收金额:IDAGIN自动编号、项目、金额、PONum 我有两个方面的问题: 将PONum与项目接收金额绑定:目前我有一个采购订单表单,要求用户在数据表表单中输入日期和PONum以及接收金额的子表单。事情是在我输入日期和PONu
由于您将在多用户更新环境中工作,因此需要确保与其他用户没有冲突。最安全的方法是使用事务 接下来,您需要决定如何以及何时对两个表进行更新。让我们来看看“选项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,你想更新“使用的材料”,但我无法理解它们之间的关系。请解释一下。