Gustav Brock
Gustav at cactus.dk
Thu Nov 16 08:18:21 CST 2006
Hi Rocky
Thanks.
I got the idea that using Clone for opening the second recordset would be faster:
- from
Set rst = dbs.OpenRecordset("Select * From " & strTable & " Where " & strId & "=" & lngId & ";")
Set rstAdd = dbs.OpenRecordset("Select Top 1 * From " & strTable & ";")
- to
Set rst = dbs.OpenRecordset("Select * From " & strTable & " Where " & strId & "=" & lngId & ";")
Set rstAdd = rst.Clone
But it isn't; it runs about 5% slower.
On my 2.2 GHz machine the function runs in less than 20 ms.
/gustav
>>> bchacc at san.rr.com 15-11-2006 15:42 >>>
G:
I'm a big DAO fan. Do lots of little things with it. So I love the
routine. My approach on this one, since there were only five fields in the
table was to Dim a variable for each field, put the values in the variables,
do an .AddNew, and copy the variables into the new records fields. That's
crude! Yours isn't.
Best,
Rocky
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
Sent: Wednesday, November 15, 2006 3:03 AM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Copy a record in a table
Hi Rocky
Crude? How come? DAO is normally the fastest method to add a record to a
recordset.
Here's a basic function:
<code>
Public Function CopyRecord( _
ByVal strTable As String, _
ByVal strId As String, _
ByVal lngId As Long) _
As Boolean
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rstAdd As DAO.Recordset
Dim fld As DAO.Field
Dim strFld As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Select * From " & strTable & " Where " &
strId & "=" & lngId & ";")
Set rstAdd = dbs.OpenRecordset("Select Top 1 * From " & strTable & ";")
With rstAdd
.AddNew
For Each fld In rstAdd.Fields
With fld
strFld = .Name
If Not strFld = strId Then
.Value = rst.Fields(strFld).Value
End If
End With
Next
.Update
.Close
End With
rst.Close
Set fld = Nothing
Set rstAdd = Nothing
Set rst = Nothing
Set dbs = Nothing
End Function
</code>
Of course, you will need to refine this for compound indices, other unique
indices, OLE fields, default values etc. Also add error handling.
/gustav
>>> bchacc at san.rr.com 15-11-2006 02:11 >>>
Dear List:
Is there a quick or slick or elegant way to copy a record in a table to a
new record in the same table - just duplicating a record
I've done it using DAO and cycling through the fields and creating the new
record and adding it but that seems awfully crude.
MTIA
Rocky