0

在 Access 中,我正在尝试编写一些代码,这些代码将简单地将所有行从一个表复制到另一个表中。

我试图不使用 SQl,这是希望 VB 这样做会快很多,目前用于完成这项工作的查询需要一个小时。

它在第一条记录处中断,“记录被删除”。尽管从中导出记录的表中有记录。

我想知道是否有人对如何解决这个问题有任何想法?

或者如果我以错误的方式解决这个问题?

Public Sub ClientsImport()
Dim rs As Recordset, rsIN As Recordset
Dim db As Database

Set db = CurrentDb()
Set rs = db.OpenRecordset("tblDIFCClients_Import2", dbOpenDynaset)
Set rsIN = db.OpenRecordset("tblDIFCClients_import_IN", dbOpenDynaset)

Logit "Start:tblDIFCClients_import..."
DoCmd.RunSQL ("delete * from tblDIFCClients_import_IN")
Logit "... Cleared holding table..."
CurrentDb.Execute ("qryMatch_TblClients1")
Logit "... Grabbed from Server..."
Logit "... Updating Live table..."
DoCmd.RunSQL ("delete * from tblDIFCClients_import2")
Logit "Append Clients"

rsIN.MoveFirst
With rs
    Do Until rsIN.EOF
    .AddNew
    ![fldDIFCClientsRAWID] = rsIN![fldDIFCClientsRAWID]
    ![fldClientID] = rsIN![fldClientID]
    ![fldClientname] = rsIN![fldClientname]
    ![fldStyleSheet] = rsIN![fldStyleSheet]
    ![fldcustomjs] = rsIN![fldcustomjs]
    ![fldBannerImage] = rsIN![fldBannerImage]
    ![fldLogoImage] = rsIN![fldLogoImage]
    ![fldVanityURL] = rsIN![fldVanityURL]
    ![fldDescription] = rsIN![fldDescription]
    ![fldBusinessNumber] = rsIN![fldBusinessNumber]
    ![fldBasePrimaryColour] = rsIN![fldBasePrimaryColour]
    ![fldDefaultForwardingEmail] = rsIN![fldDefaultForwardingEmail]
    ![fldHasPFPs] = rsIN![fldHasPFPs]
    ![fldHasMicrosite] = rsIN![fldHasMicrosite]
    ![fldHasEvents] = rsIN![fldHasEvents]
    ![fldDateTimeStamp] = rsIN![fldDateTimeStamp]
    ![fldModified] = rsIN![fldModified]
    ![fldDownloaded] = rsIN![fldDownloaded]
    ![fldIgnore] = rsIN![fldIgnore]
    .Update
    rsIN.MoveNext
End With

rs.Close
Set rs = Nothing
rsIN.Close
Set rsIN = Nothing

Logit "End: Clients Import"
Logit ""
Debug.Print "Done:Clients"
4

1 回答 1

0

首先,我真的不认为循环通过记录集会比通过 SQL 复制表更快。

实际上,您的代码正在删除您在阅读之前复制的表的内容因此会row is deleted出现错误。您从以下位置获得记录集tblDIFCClients_import_IN

Set rsIN = db.OpenRecordset("tblDIFCClients_import_IN", dbOpenDynaset)

删除其内容:

DoCmd.RunSQL ("delete * from tblDIFCClients_import_IN")

然后尝试从中读取:

Do Until rsIN.EOF

qryMatch_TblClients1在两者之间执行。这是否填充tblDIFCClients_import_IN?如果是这样,这就是您期望加载到的内容,那么只需在调用执行之后tblDIFCClients_Import2移动该Set rsIN = db.OpenRecordset...行即可修复它。qryMatch_TblClients1

于 2013-10-30T12:31:08.773 回答