Solved

Loop through 2 arrays simultaneously and add the records to a new table

Posted on 2011-03-16
6
642 Views
Last Modified: 2012-05-11
This is an addendum to my previous question which was answered. The code below works when I split a concatenated string from a field in Table A and append the records to a Field in Table B. Now I have added a second concatenated field from Table A, that I need to append concurrently into a different field from the same record of Table B.

So basically:

Table A
Record  1:
Field 1 = 10, 20, 30, 40
Field 2 = 50, 60, 70, 80

becomes . .  .

Table B
Record 1: Field 1 = 10  Field 2 = 50
Record 2: Field 1 = 20  Field 2 = 60
Record 3: Field 1 = 30  Field 2 = 70
Record 4: Field 1 = 40  Field 2 = 80

The code below achieves the original desired result in appending Field 1 from Table A into separate records in Table B. I have tried different coding combinations to include the second split but nothing has worked. Thanks for your help again.

Public Sub SplitSetReps()
Dim rsIn As DAO.Recordset
Dim rsOut As DAO.Recordset
Dim intX As Integer

Set rsIn = CurrentDb.OpenRecordset("SELECT * Table A WHERE ID =  " & Forms!frmMainDetail!StrID, dbOpenDynaset)
Set rsOut = CurrentDb.OpenRecordset("Table B", dbOpenDynaset)

Do While Not rsIn.EOF
    If Not IsNull(rsIn!Reps) Then
        astrNames = Split(rsIn![Reps], ",")
    End If

    For i = 0 To UBound(astrNames)
        rsOut.AddNew
        rsOut![SetsRep] = astrNames(i)
        rsOut![SetsRepID] = rsIn!StrID

        rsOut.Update
    Next
    rsIn.MoveNext
Loop

End Sub
0
Comment
Question by:skennelly
  • 4
  • 2
6 Comments
 
LVL 39

Expert Comment

by:als315
ID: 35149569
Add after string:
astrNames = Split(rsIn![Reps], ",")
this string:
astrNames1 = Split(rsIn![Reps1], ",")
Reps1 - Field 2 name in Table A
and after string
 rsOut![SetsRep] = astrNames(i)
this:
 rsOut![SetsRep1] = astrNames1(i)
SetsRep1 - Field 2 name in Table B
0
 

Author Comment

by:skennelly
ID: 35150258
Thanks als315. I have tried that solution and it works for the most part. However, at times the additional field in (SetsRep1) may be a Null value. When it is, I get a Run Time Error '9'; Subscript Out of Range message. I have tried several If IsNull Statements to alleviate the problem, again to no avail. Thanks again if you can assist me further.
0
 

Author Comment

by:skennelly
ID: 35150872
Let me retract that somewhat. It appears as if the error occurs when the strings do not match with the same number of array components (i). so if Field one is 10, 15, 20, 25, and Field 2 is 35, 45, and 65, I generate the error. I'll keep trying to narrow down this error. Thanks.
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 39

Accepted Solution

by:
als315 earned 500 total points
ID: 35151369
OK. You can add this condition:
if UBound(astrNames1) > i then
 rsOut![SetsRep1] = astrNames1(i)
end if
0
 

Author Comment

by:skennelly
ID: 35153218
Ok, we're getting there. When I insert your code into the condition, it works with the exception of the last value in the array of SetsRep1. So if the string is 10, 15, 20, 25 the field values in Table B are 10, 15, 20. The last value (25) is a null field. The original array (astrNames) contains all the values of the string. I'll keep playing with the condition statement. Thanks.
0
 

Author Comment

by:skennelly
ID: 35153265
Here is how I got it to work. I used the >= in the condition statement, and everything copied over correctly. Thank you for your assistance. I will continue to test all of the conditions, but will definitely award you the points. I appreciate it.

if UBound(astrNames1) >= i then
 rsOut![SetsRep1] = astrNames1(i)
end if
0

Featured Post

Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Join & Write a Comment

The first two articles in this short series — Using a Criteria Form to Filter Records (http://www.experts-exchange.com/A_6069.html) and Building a Custom Filter (http://www.experts-exchange.com/A_6070.html) — discuss in some detail how a form can be…
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
In Microsoft Access, learn how to “cascade” or have the displayed data of one combo control depend upon what’s entered in another. Base the dependent combo on a query for its row source: Add a reference to the first combo on the form as criteria i…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now