我有这个代码,我试图在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帮助会很大,我的意思是非常感谢。感谢
答案 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()将记录重新加载到表单中,而不是尝试将其加入书签。书签仅适用于它们源自的相同记录集。这提供了往返验证,即数据实际上已保存到数据库中。