2009-06-16 5 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 

私は何を取得、私はトートログからレコードをコピーしようとL20444B2にL20444、言うことができますから、番号を変更し、元と同じフィールド情報を持っています。これは私が今までのところですが、私は何も得られません。 AHHヘルプは大幅になり、私は大いに感謝しています。ありがとう

答えて

1

いくつか原因が考えられます。ここに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は、フォームレコードセットを再構築します。

あなたを助ける希望

0

実際にはデータベースレコードを保存していても、それを再表示しないことがあります。私はコードのその部分を解読するのに苦労していますし、あなたのフォームが縛られているか分かりません。

とにかく、あなたはこのようなあなたのレコードセットを開く必要があります。

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

をあなたが(これ、あなたがしなければならない)バックエンドとしてSQL Serverを使用している場合は特に。

レコードを保存したら、それをブックマークするのではなく、recordset.find()を実行してフォームに戻すだけでよいでしょう。ブックマークは、元のレコードセットと同じレコードセットでのみ動作します。これにより、データが実際にデータベースに保存されたラウンドトリップ検証が提供されます。

関連する問題