私は複製しようとしている非常に大きなレコードを持っているし、新しい主キーIDを持つ新しいバージョンでフォームを開きます。これは、データをコピーするためにすべてのフィールドを反復処理することなく、Access VBAで実行できますか?新しいプライマリキー(VBA)で重複レコード
ありがとうございます!
私は複製しようとしている非常に大きなレコードを持っているし、新しい主キーIDを持つ新しいバージョンでフォームを開きます。これは、データをコピーするためにすべてのフィールドを反復処理することなく、Access VBAで実行できますか?新しいプライマリキー(VBA)で重複レコード
ありがとうございます!
最速と最も簡単な方法は、DAOを使用することで、フォームのRecordsetClone:
Private Sub cmdDuplicate_Click()
Dim rstSource As DAO.Recordset
Dim rstInsert As DAO.Recordset
Dim fld As DAO.Field
If Me.NewRecord = True Then Exit Sub
Set rstInsert = Me.RecordsetClone
Set rstSource = rstInsert.Clone
With rstSource
If .RecordCount > 0 Then
' Go to the current record.
.Bookmark = Me.Bookmark
With rstInsert
.AddNew
For Each fld In rstSource.Fields
With fld
If .Attributes And dbAutoIncrField Then
' Skip Autonumber or GUID field.
ElseIf .Name = "SomeFieldToPreset" Then
rstInsert.Fields(.Name).Value = SomeValue
ElseIf .Name = "SomeFieldToExclude" Then
' Leave blank
Else
' All other fields.
' Copy field content.
rstInsert.Fields(.Name).Value = .Value
End If
End With
Next
.Update
' Go to the new record and sync form.
.MoveLast
Me.Bookmark = .Bookmark
.Close
End With
End If
.Close
End With
Set rstInsert = Nothing
Set rstSource = Nothing
End Sub
これは新しいレコードに現在のレコードからフォームを移動します。これを簡単に変更して新しいIDを選択し、新しいレコードで他のフォームを開くことができます。
Duplicate Record
コマンドを参照してください。あなたはどちらかそれはボックス
から出てくると、それを使用するか、ウィザードによって生成されたコードを調査し、自分のためにカスタマイズすることができます。ウィザードを使用する方法では、PKが設定されている場合は、オートナンバー型のPKはコピーされません。
この操作は、現在のレコードをembedマクロでコピーして貼り付けることによって行われます(ただし、マクロをvbaにエクスポートすることは可能です)。つまり、フォームに隠しフィールドが含まれていると、コピーや貼り付けが行われません。 –
@willywonkaあなたが指摘していることについて驚くべきことは、フィールドがフォーム上にあるが表示されていない場合でも、コピーされないことです。はい、これは慎重に使用する必要があります。 – Brad
いいえ、VBAのすべてのフィールドを繰り返し処理するか、 'insert'クエリのすべてのフィールドをリストする必要があります。特に、それらのうちの1つをスキップしたいからです。 VBA側では、レコードセットのフィールドを 'For Each'でループすることができ、内部に' If'チェックしか持たず、プライマリキーをスキップすることができます。 – GSerg