【发布时间】:2013-12-23 17:12:30
【问题描述】:
我编写了一些 vbscript,它从另一个数据库中的表更新一个访问数据库中的所有新字段,但是我遇到了重复主键的问题。
我无法更改数据库的结构,因此无法删除主键,但理想情况下我希望它自动填充主键。这是我的表结构(它们是两个表)
表“订单”:
Order Sequence Number About 20 more rows of data that do not have to be unique
a primary key e.g 2 other data
表'OrderDetail':
OrderDetail OrderSequence Some other rows that don't need to be unique
a primary key the key from Order some other data
我的第一个问题是自动填充两个表的主键,因此它们是唯一的,然后我的第二个问题是匹配正在添加的两行,如果主键在“订单”表上更改为“订单序列号” ' 在“OrderDetail”表中的“OrderSequence”上更新它。
这是我的 vbscript,如果它们是唯一的,它可以复制值:
Public Function dhupdate1()
'Temp field
Dim fField As Field
Dim bCopy As Boolean
'Open source database
Dim dSource As Database
Set dSource = CurrentDb
'Open dest database
Dim dDest As Database
Set dDest = DAO.OpenDatabase("\\BMCDONALD-PC\SellerDeck 2013\Sites\New_Site\ActinicCatalog.mdb")
'Open source recordset
Dim rSource As Recordset
Set rSource = dSource.OpenRecordset("OrderDetail", dbOpenForwardOnly)
'Open dest recordset
Dim rDest As Recordset
Set rDest = dDest.OpenRecordset("OrderDetail", dbOpenDynaset)
'Loop through source recordset
While Not rSource.EOF
'Reset copy flag
bCopy = False
'Look for record in dest recordset
rDest.FindFirst "OrderDetailID = " & rSource.Fields("OrderDetailID") & ""
If rDest.NoMatch Then
'If not found, copy record
rDest.AddNew
bCopy = True
End If
'If copy flag is set, copy record
If bCopy Then
For Each fField In rSource.Fields
rDest.Fields(fField.Name) = rSource.Fields(fField.Name)
Next fField
Set fField = Nothing
rDest.Update
End If
'Next source record
rSource.MoveNext
Wend
'Close dest recordset
rDest.Close
Set rDest = Nothing
'Close source recordset
rSource.Close
Set rSource = Nothing
'Close dest database
dDest.Close
Set dDest = Nothing
'Close source database
dSource.Close
Set dSource = Nothing
End Function
Public Function dhupdate2()
'Temp field
Dim fField As Field
Dim bCopy As Boolean
'Open source database
Dim dSource As Database
Set dSource = CurrentDb
'Open dest database
Dim dDest As Database
Set dDest = DAO.OpenDatabase("\\BMCDONALD-PC\SellerDeck 2013\Sites\New_Site\ActinicCatalog.mdb")
'Open source recordset
Dim rSource As Recordset
Set rSource = dSource.OpenRecordset("Order", dbOpenForwardOnly)
'Open dest recordset
Dim rDest As Recordset
Set rDest = dDest.OpenRecordset("Order", dbOpenDynaset)
'Loop through source recordset
While Not rSource.EOF
'Reset copy flag
bCopy = False
'Look for record in dest recordset
rDest.FindFirst "[Order Number] = '" & rSource.Fields("Order Number") & "'"
If rDest.NoMatch Then
'If not found, copy record
rDest.AddNew
bCopy = True
End If
'If copy flag is set, copy record - ignore errors
If bCopy Then
For Each fField In rSource.Fields
On Error Resume Next
rDest.Fields(fField.Name) = rSource.Fields(fField.Name)
On Error GoTo 0
Next fField
Set fField = Nothing
rDest.Update
End If
'Next source record
rSource.MoveNext
Wend
'Close dest recordset
rDest.Close
Set rDest = Nothing
'Close source recordset
rSource.Close
Set rSource = Nothing
'Close dest database
dDest.Close
Set dDest = Nothing
'Close source database
dSource.Close
Set dSource = Nothing
End Function
我一直在阅读有关自动填充的内容,如果它不是唯一的,但是我很困惑,我需要这两个函数来获取一个订单的两行并更改订单序列的两个数字。我对 VB 还很陌生,因此非常感谢任何帮助。
谢谢, 西蒙
【问题讨论】:
-
主键字段是
AutoNumber字段吗? -
他们是
AutoNumber并删除了标签
标签: ms-access ms-access-2007 vba