我写了一些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
我的第一个问题是让两个表的主键自动填充,因此它们是唯一的,然后我的第二个问题是匹配正在添加的两行,如果主键在'Order'表中更改为'Order Sequence Number'更新它在'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的新手,所以任何帮助都非常感谢.
谢谢,西蒙