我有一个表格(采购订单)和一个子表格 (采购订单详情)。主窗体包含 个数 PO(文本框)、供应商(组合框)、员工(组合框)、 状态(组合框),其中包含 2 条记录(新建和完成)和一个日期框(创建 PO 时)。子表单(数据表)包含产品(组合框)、数量和一个价格字段。
我想做的是在主窗体上添加一个按钮,这样就可以了 接下来。
按下按钮时,应执行 VBA 代码并执行下一步操作。 从主窗体中获取数据(采购订单编号、状态和日期) 和子表格(产品、数量和价格)并将所有内容放入 一张表 (StockMovements)。
我设法用下一个代码做到了这一点:
Private Sub cmdOrder_Click()
Dim strSQL As String
strSQL = "INSERT INTO StockMovement (ID_Product, Status, Quantity, ID_PurchaseOrder) VALUES (" & _
Me.frmPurchaseOrderDetails_Subform.Form!comboboxProduct & ", '" & _
Me!txtStatus & "', " & _
Me.frmPurchaseOrderDetails_Subform.Form!txtQuantity & ", " & _
Me!txtID_PurchaseOrder & ");"
DoCmd.RunSQL strSQL
Me.Requery
End Sub
但是,有两个问题:
- 如您所见,我没有添加日期字段,因为出现错误, 不记得具体是哪一个了,但我记得是 2075;
- 代码在没有日期的情况下工作,但只将一个产品添加到 表,第一个。在采购订单中通常有更多 不止一种产品。
因为我是 VBA 的新手,所以我恳请您像对待新手一样对待我,并尽可能详细地解释。 (修正了代码,忘了更改语言。我的意思是我粘贴了错误的,现在它是正确的但仍然无法正常工作:))
谢谢!
最佳答案
1) 如果您只有一个特定领域有问题,我会检查那个领域有什么特别之处。可能输入被格式化为字符串,字段被格式化为日期/时间。在这种情况下,请尝试使用 CDate()-Function。我可以想象,最后的 .Value 也可以解决问题。
Dim datDate as Date
datDate = CDate(Me!txtDate.Value)
2) 您的代码只插入一行是绝对正确的。请记住,例如Me!txtStatus.Value 是一个仅包含一条数据的文本框。数据行保存在表格中,根据您在主窗体中选择的行(= 一行),相应的值显示在文本框中。
INSERT INTO table (field1,field2) VALUES (value1,value2)
INSERT INTO 每次执行时插入一行。所以你提到的代码中的SQL需要重复。您可以使用循环来做到这一点。
Dim strSQL As String
strSQL = ""
For Each Item In Group
strSQL = strSQL & "INSERT INTO table (field1,field2) VALUES (value1,value2)"
Next
在我看来,以这种方式复制数据对 VBA 来说绝对令人厌烦。您需要创建记录集、修改和合并它们。我会尝试使用 Access Non-VBA-Solutions 解决尽可能多的问题。
我的问题是:您是否考虑过将表单(和子表单)直接链接到表格?
关于mysql - MS Access VBA 从表单写入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111040/