我有一个表单(采购订单)和一个子表单 (采购订单明细)。主窗体包含的编号 PO (文本框),供应商(组合框),员工(组合框), 状态(组合框),其中包含2条记录(新建和完成)和日期框(创建采购订单时)。子表单(数据表)包含产品(组合框),数量和价格字段。
我想要做的是在主表单上添加一个按钮 下。
按下按钮时,应执行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
然而,有两个问题:
因为我是VBA的新手,所以如果可能的话,我会请你像新手一样对待我并解释更详细。 (修正了代码,忘了改变语言。我的意思是我粘贴了错误的一个,现在它是正确的,但当然还没有工作:))
谢谢!
答案 0 :(得分:0)
1)如果您只对某个特定字段有疑问,我会查看该字段的特殊情况。输入可能格式化为字符串,字段格式为日期/时间。在这种情况下,尝试使用CDate() - 函数。我可以想象,最后一个.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尽可能地解决这个问题。
我的问题:您是否考虑过将表单(和子表单)直接链接到表格?
答案 1 :(得分:0)
日期可以这样插入:
"INSERT INTO StockMovement ([DateField]) " & _
"VALUES (#" & Format(Me!DateField.Value, "yyyy\/mm\/dd") & "#)"
也就是说,您的代码将仅插入一条记录。要插入多个记录,您需要一个选择查询,或者 - 更快 - 使用 DAO 将目标表作为记录集打开,然后作为源,循环子表单的 RecordsetClone 并将记录逐个复制到目标表中。