Hello All! I have run into an issue cloning records in Microsoft Access. I have modified code from Allen Browne's website. The code clone's the main record first after prompting the end user for a new date. That part works flawlessly. The problem arises when I get to the detail records. All of the information for the detail records gets cloned; however I can't get the new date inserted into the records. It leaves it as a null value which displays as 12/30/1899 in SQL Server 2005. I believe it must have something to do with a date delimiter, but I am not quite sure. Any help would be greatly appreciated.
Public Function DupRec()On Error GoTo err_handle'Purpose: Duplicate the main form record and related records in the subform.'Provided by Allen Browne, November 2005Dim lngEventID As Long, lngSetupID As LongDim Msg, Style, Title, Response, MyString 'Message BoxDim datStart As Date, datEnd As Date, strEName As StringDim strSetup As String, strMeals As String, strBvgSvc As StringDim strEquip As String, db As DAO.DatabaseSet db = DBEngine(0)(0)'Get dates for new record from temporary table.datStart = DLookup("[datStart]", "zttblDupDate")datEnd = DLookup("[datEnd]", "zttblDupDate")strEName = Forms!fdlgDupDate!txtEName'Make sure there is a record to duplicateIf Me.NewRecord Then 'Notify the user there is no record to duplicate Msg = "Select a record to duplicate." Style = vbOKOnly + vbInformation Title = "No Data" Response = RichBox(Msg, Style, Title)Else 'Duplicate the main record: add to form's clone. With Me.RecordsetClone .AddNew !EventName = strEName !Client = Me.cboClient !Category = Me.cboCategory !Status = Me.cboStatus !Location = Me.cboLocation !StartDate = datStart !EndDate = datEnd !ProgramStartTime = Me.txtProgramStart !ProgramEndTime = Me.txtProgramEnd !ArrivalTime = Me.txtArrivalTime !SetupDate = Me.txtArrivalDate !SetupTime = Me.txtSetupTime !RegistrationTime = Me.txtRegStart !iMISCode = Me.txtiMISCode !SvcChg = Me.txtSvcChg !PartnerDiscount = Me.cboDiscount !CleaningFee = Me.txtCleaningFee .Update 'Save the primary key value, to use as the foreign key for the related records. .Bookmark = .LastModified lngEventID = !EventID 'Duplicate the related event setup records: append query. If Me.[Event Setup Subform].Form.RecordsetClone.RecordCount > 0 Then strSetup = "INSERT INTO todbEventSet ( Event, MeetingDate, MeetingLocation, RentalRate, Rate, " & vbCrLf & _ "PrimarySetup, SecondarySetup, RegTable, ExtraChairs, ProgramStartTime, " & vbCrLf & _ "ProgramEndTime, ExpectedPrimary, ExpectedSecondary ) " & vbCrLf & _ "SELECT " & lngEventID & " As NewEvent, " & datStart & " As NewDate, " & vbCrLf & _ "todbEventSet.MeetingLocation, todbEventSet.RentalRate, " & vbCrLf & _ "todbEventSet.Rate, todbEventSet.PrimarySetup, " & vbCrLf & _ "todbEventSet.SecondarySetup, todbEventSet.RegTable, " & vbCrLf & _ "todbEventSet.ExtraChairs, todbEventSet.ProgramStartTime, " & vbCrLf & _ "todbEventSet.ProgramEndTime, todbEventSet.ExpectedPrimary, " & vbCrLf & _ "todbEventSet.ExpectedSecondary" & vbCrLf & _ "FROM [todbEventSet] WHERE Event = " & Me.txtID & ";" db.Execute strSetup, dbFailOnError Else 'Notify the user there is no record to duplicate Msg = "Select a record to duplicate." Style = vbOKOnly + vbInformation Title = "No Data" Response = RichBox(Msg, Style, Title) MsgBox "Main record duplicated, but there were no related event setup records." End If 'Duplicate the related meal records: append query. If Me.[Event Meals Subform].Form.RecordsetClone.RecordCount > 0 Then strMeals = "INSERT INTO [todbMeals] ( Event, MealDate, MealType, FoodSetup," & vbCrLf & _ "SetupTime, ServingTime, Expected) " & vbCrLf & _ "SELECT " & lngEventID & " As NewEvent, " & datStart & " As NewDate, " & vbCrLf & _ "todbMeals.MealType, todbMeals.FoodSetup, todbMeals.SetupTime, " & vbCrLf & _ "todbMeals.ServingTime, todbMeals.Expected" & vbCrLf & _ "FROM [todbMeals] WHERE Event = " & Me.txtID & ";" db.Execute strMeals, dbFailOnError Else MsgBox "Main record duplicated, but there were no related meal records." End If 'Duplicate the related beverage records: append query. If Me.[Beverage Expenses].Form.RecordsetClone.RecordCount > 0 Then strBvgSvc = "INSERT INTO [todbBevSvc] ( Event, ExpenseDate, Beverage, Quantity, UnitPrice ) " & vbCrLf & _ "SELECT " & lngEventID & " As NewEvent, " & datStart & " As NewDate, " & vbCrLf & _ "todbBevSvc.Beverage, todbBevSvc.Quantity, todbBevSvc.UnitPrice " & vbCrLf & _ "FROM [todbBevSvc] WHERE Event = " & Me.txtID & ";" db.Execute strBvgSvc, dbFailOnError Else MsgBox "Main record duplicated, but there were no related beverage records." End If 'Display the new duplicate. Me.Bookmark = .LastModified End WithEnd If'Update details records using the new dates.DoCmd.RunSQL "UPDATE todbEventSet SET [MeetingDate] = " & datStart & " WHERE [Event] = " & Me.txtID'Delete temporary tableDoCmd.DeleteObject acTable, "zttblDupDate"Exit_Proc:Exit Functionerr_handle:Call ErrorLog(Err.Description, Err.Number, Me.Name, Erl, "DupRec()")Resume Exit_ProcEnd Function
<I have modified code from Allen Browne's website.>
Please post the link to this original code...
Have you tried contacting the author?
Perhaps something is awry in your modification?
Many experts here are wary of modifying another top developer's code...
< The code clone's the main record first after prompting the end user for a new date. That part works flawlessly. The problem arises when I get to the detail records. All of the information for the detail records gets cloned; however I can't get the new date inserted into the records. >
Why would a date in the Parent record be needed to be stored in the Child table?
For example:
Orders (Main) and Order Details (Sub)
The Order Date need only exists in the main form/table, there is no need to duplicate this date in the subform because that would create duplicate/redundant data. Besides, you can pull the OrderDate into the subform via a query.
I mean you can probably get an answer to your question as posted, ...
I am just wondering about the need to store the Date in many places instead of one.
Let's see what other Experts post, in case I misunderstood something...
Thank you so much for your quick reply! You have mentioned some good points. Let me provide more background information on why the date is stored in the main record and the child records. This database is used to book events for meeting spaces. Meetings can booked as one day events or multiple day events.
Example:
The main record indicates ABC Company would like to have a meeting in Conference Room A from 12/26/2012 to 12/28/2012. The first set of child records needs to store a date to indicate how Conference Room A should be setup on each of the days listed in the main record. The second set of child records needs a date to store the lunch menu for each of the days listed in the main record.
The dates seems redundant, but without them we would not be able to tell what pieces of information belong to each day of the event.
Pesuming that there is a valid reason for duplicating this data...
You could:
1. Store the "Date" as a variable
2. Insert this date variable into the child records after the child records are duplicated.
Pseudo code:
'Code to store the date as a variable
'Code to copy main records
'Code to Copy the Child records
'Code to Insert the date variable into the child records
Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!
That does the trick! The date delimiters were missing in the original update query. After reviewing the syntax in your last post, I modified the code in the actual cloning of the details using the correct syntax and removed the update query.
Originial:
"SELECT " & lngEventID & " As NewEvent, " & datStart & " As NewDate, " & vbCrLf & _
IT issues often require a personalized solution. With Ask the Experts™, submit your questions to our certified professionals and receive unlimited, customized solutions that work for you.
Premium Content
You need an Expert Office subscription to comment.Start Free Trial