Question

I'm working with DAO recorsets, the basic idea is to populate one table with records many times as the given argument indicates (limit).

It appears to work, but suddenly when I want to use the form again, it throws 3022 error. When I see table values, none of them is duplicated. I delete all records from that table and refresh table and form. The table doesn't show any value until I refresh the form. The unique value that is shown is the last value i try to save in database.

Here is a little bit of code:

Private Sub add_element(loops_number As Double)
   i = 1
   While (i < CDbl(loops_number))
       function
       i = i + 1
   Wend
End Sub

That is working apparently fine.

Private Sub populate()
   Dim db As DAO.Database
   Dim rst As DAO.Recordset
   Dim last As DAO.Recordset
   Set db = CurrentDb()
   Set rst = db.OpenRecordset("Element", dbOpenTable)
   Set last = rst.Clone


   With rst
   .AddNew
     If (last.RecordCount <= 0) Then
       'here I pass input form values to recordset fields ,because its the first row
       last.Close
       .Update
       .Close
     Else
       last.MoveLast
       !Pk = Custom_pk 'Custom_pk is obtained with a function --- not relevant
       'here I pass remain values from last record to a new one --- because records has the same attributes
       last.Close
       .Update
       .Close
     End If
     Set rst = Nothing
     Set ultimo = Nothing
    End With

End Sub

It's like last record values stays "active" after function finish work. I don't get why this happens.

Element pk is alphanumeric e.g. : "A1", then I build a function that separates A from 1,add +1 to number and concatenate values again, so the result is "A2"

Was it helpful?

Solution

I resolved it using an Autonumber field as primary key keeping the original pk (alphanumeric) as a common field then I could mantain my vba code exactly like I wanted it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top