在VBA 2中复制记录(新问题)

时间:2009-06-16 18:05:52

标签: ms-access vba

我有这个代码,我试图在VBA中复制一条记录。不幸的是我无法让它发挥作用。我不知道为什么它什么都不做。

Dim OldRecord As DAO.Recordsets, NewRecord As DAO.Recordset
Dim strSQL As String

strSQL = "SELECT [Tote Log].* FROM [Tote Log] WHERE Number = " & _
            Me.tbScannerRead.Value

Set OldRecord = CurrentDb.OpenRecordset(strSQL)

If OldRecord.Count = 1 Then
    Set NewRecord = _
                CurrentDb.OpenRecordset("SELECT [Tote Log].* FROM [Tote Log]")
    With NewRecord
        .AddNew
        For i = 0 To .Fields.Count - 1
            .Fields(i).Value = OldRecord.Fields(i).Value
        Next i
        .Fields("Number").Value = Me.tbScannerRead & "B2"
        .Update
        varBookMark = .Bookmark
    End With
    NewRecord = varBookMark
    DoCmd.RunCommand acCmdSelectRecord
    Me.tbMessageBox = "Added new record"
    Me.tbMessageBox.Visible = True
    GoodToteRead = False
    Me.tbScannerRead.SetFocus
End If

我什么都没得到,我正在尝试从手提包日志中复制一条记录并将数字从L20444更改为L20444B2,并且具有与原始相同的字段信息。这是我到目前为止的地方,但我一无所获。 Ahy帮助会很大,我的意思是非常感谢。感谢

2 个答案:

答案 0 :(得分:1)

有一些事情可能导致它。这是一个。你的桌子有主键吗?看起来您正在尝试将主键更新为表中已存在的值,然后再进行更改。这是发生在表格上吗?如果是这样,Access可能会因为更改后面的记录集而感到沮丧。在进行更改之前me.undo()可以提供帮助。此外,如果你在表格上,你可以用这种方式完成相同的事情。这有点笨拙,但这很简单。

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdPaste

作为替代方案,我会建议这些内容。

Dim sSql As String
Dim sUpdateSuffix as string
sUpdateSuffix="B2"
Const sTableName As String = "[Tote Log] "
sSql = "INSERT INTO "[Tote Log]([number],[whateverelse]) " & _
       "SELECT [number]" & sUpdateSuffix & ",[whateverelse]  FROM [Tote Log] WHERE Number = " & Me.tbScannerRead.Value
CurrentProject.Connection.Execute sSql

如果要动态构建sql字符串,请使用与用于遍历字段并构建查询字符串相同的方法。 me.requery将重建表单记录集。

希望能帮到你

答案 1 :(得分:0)

实际上它可能是保存数据库记录但不重新显示它;我很难解读代码的这一部分,而且我不知道你的形式是什么。

无论如何,你应该打开你的记录集:

Set rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges) 

特别是如果您使用SQL Server作为后端(您应该)。

保存记录后,您可能只需通过执行recordset.find()将记录重新加载到表单中,而不是尝试将其加入书签。书签仅适用于它们源自的相同记录集。这提供了往返验证,即数据实际上已保存到数据库中。