|
请教各位老师:
我学着在"订单明细"窗口添加一个"复制"按钮,希望达到的效果是: 可以复制主窗体和子窗体所有记录成为新的内容,参考了一下MS的例子,但不知道哪里出了问题,不成功.提示"这个集合中找不到此项目"
Microsoft 提供的编程示例只用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。要重复的主窗体的记录和相关联的子窗体的详细信息记录,必须自动完成以下过程:
重复的主窗体记录。
设置复制的主窗体记录中的一个唯一的主关键字字段值。如果主键是自动编号字段,这不需要。
保存重复的主窗体记录。
创建和运行追加查询的选择具有源主窗体记录的主关键字值的明细数据记录,将回到使用主键值从复制的主窗体的记录的详细信息表中追加这些记录。
很重要的保存复制的主窗体记录,以便与追加查询正在复制的明细数据记录到相关联的主窗体记录。这样就避免了参照完整性问题。
若要重复的主窗体的记录和相关联的子窗体的详细信息记录,请按照下列步骤操作:
注意: 如果您按照这些步骤在此示例中,您修改示例数据库 Northwind.mdb。您可能希望备份 Northwind.mdb 文件并在该数据库的副本,请按照下列步骤。
启动 Access 并打开示例数据库 Northwind.mdb。
在 设计 视图中打开 订单 窗体。
添加一个新的命令按钮并设置该命令按钮的属性,如下所示:
名称: btnDuplicate
标题: 复制
单击 生成器 按钮右边的命令按钮的 OnClick 属性,然后单击 代码生成器,然后键入下面的过程:
注: 该过程的第一个和最后一个行由 Access 为您创建。
Private Sub btnDuplicate_Click ()
Dim dbs As DAO.Database, Rst As DAO.Recordset
Dim F As Form
' Return Database variable pointing to current database.
Set dbs = CurrentDb
Set Rst = Me.RecordsetClone
On Error GoTo Err_btnDuplicate_Click
' Tag property to be used later by the append query.
Me.Tag = Me![OrderID]
' Add new record to end of Recordset object.
With Rst
.AddNew
!CustomerID = Me!CustomerID
!EmployeeID = Me!EmployeeID
!OrderDate = Me!OrderDate
!RequiredDate = Me!RequiredDate
!ShippedDate = Me!ShippedDate
!ShipVia = Me!ShipVia
!Freight = Me!Freight
!ShipName = Me!ShipName
!ShipAddress = Me!ShipAddress
!ShipCity = Me!ShipCity
!ShipRegion = Me!ShipRegion
!ShipPostalCode = Me!ShipPostalCode
!ShipCountry = Me!ShipCountry
.Update ' Save changes.
.Move 0, .LastModified
End With
Me.Bookmark = Rst.Bookmark
' Run the Duplicate Order Details append query which selects all
' detail records that have the OrderID stored in the form's
' Tag property and appends them back to the detail table with
' the OrderID of the duplicated main form record.
DoCmd.SetWarnings False
DoCmd.OpenQuery "Duplicate Order Details"
DoCmd.SetWarnings True
'Requery the subform to display the newly appended records.
Me![Orders Subform].Requery
Exit_btnduplicate_Click:
Exit Sub
Err_btnDuplicate_Click:
MsgBox Error$
Resume Exit_btnduplicate_Click:
End Sub
在 工具 菜单上单击 引用,然后单击以选中 Microsoft DAO 3.6 对象库。单击 确定。
在 文件 菜单上单击 关闭并返回到 Microsoft Access。
保存 订单 窗体并将其关闭。
创建一个基于 订单明细 表的新查询。
在 查询 菜单上,单击 更新查询。在 追加 对话框中选择 表名称 框中的 订单详细信息,然后单击 确定。
双击 订单明细 字段列表,以在列表中选择的所有字段的标题栏。将字段拖动到 QBE 网格的第一列。
从 订单 id 列中的 追加到 行中删除 订单 id 和 条件 行中键入以下行:
[窗体]! [订单] [标记]
此条件选择其中的 订单 id 是 订单 窗体的 标记 属性,源 订单 id 中找到值的明细数据记录。
在一个空的 QBE 网格列中创建新的列 字段 行中键入以下行:
NewOrderID: CLng([Forms]![Orders]![OrderID])
在新列中键入以下行在 追加到 行中:
[订单 id]
然后将查询另存为 重复订单明细,并将其关闭。
这确保了确认所选的详细信息返回到 订单明细 表追加的记录,将 订单 id 字段设为的在新的 订单 id 重复,主窗体 订单 记录。 |
|