2009-06-16 37 views
0

我有這段代碼,我試圖在VBA中複製記錄。不幸的是我無法讓它工作。我不知道爲什麼它不會做任何事情。在VBA 2中複製記錄(新問題)

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的幫助會很大,我的意思是非常感謝。謝謝

回答

1

有幾件事情可能導致它。這是一個。你的桌子有主鍵嗎?看起來您正在嘗試將主鍵更改爲表中已存在的值,然後再對其進行更改。這是發生在表單上嗎?如果是這樣,訪問可以讓你感到不安,因爲它改變了它後面的記錄集。在做出更改之前可以提供一個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將重建表單記錄集。

希望對你有所幫助

0

那麼它可能實際上是保存數據庫記錄,但不重新顯示它;我很難破譯這部分代碼,而且我不知道你的表單是什麼。特別是如果你使用SQL Server作爲後端(你應該)

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

無論如何,你應該打開你的記錄是這樣的。

一旦保存了記錄,您應該重新將記錄重新加載到您的表單中,方法是執行recordset.find(),而不是嘗試爲其添加書籤。書籤僅適用於它們源自的相同記錄集。這提供了數據實際保存到數據庫中的往返驗證。