Solved

Concatenate text string for "Many" side table values back into "One" side table

Posted on 2011-03-06
3
431 Views
Last Modified: 2012-05-11
I need to develop a VBA DAO procedure to take the "Many" side values for a table , create a text string of its values,, and edit it back into the record on the "One" side of the relationship. For instance:

Table B - "Many" Side
SetNumber = 36 SetValue = 125
SetNumber = 36 SetValue = 130
SetNumber = 36 SetValue = 135

Table A - "One" Side
SetNumber = 36 SetValueTotals = 125, 130, 135

I am able to perform this procedure if I want to create a new record in Table A, but I need to find the existing record that contains the join field's value (SetNumber) in table A , and edit it so I can place the concatenated string into the SetValueTotal field. Thanks.
0
Comment
Question by:skennelly
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 6

Accepted Solution

by:
TinTombStone earned 500 total points
ID: 35046474
This should work

I have named the table OneSide and ManySide, you will need to change them in the code. (do a find & replace)

And the field name are SetNumber, SetValue and SetValueTotals, again change them if required

Also it is only working for one SetNumber, 36, which is set manualy at the top.  You may want to add an inputbox or connect it to a form to make it more flexible

Sub DoSetValuesTotals()

Dim db As DAO.Database, rst As DAO.Recordset
Dim strsql As String, strResult As String
Dim SetNumber As Long

    SetNumber = 36
   
    Set db = CurrentDb
    strsql = "SELECT ManySide.SetNumber, ManySide.SetValue FROM ManySide WHERE (((ManySide.SetNumber)=" & SetNumber & "));"
    Set rst = db.OpenRecordset(strsql)
    Do Until rst.EOF
        strResult = strResult & rst!SetValue & ", "
        rst.MoveNext
    Loop
    If Not strResult = "" Then strResult = Left(strResult, Len(strResult) - 2)
    Set rst = db.OpenRecordset("OneSide", dbOpenDynaset)
    rst.FindFirst "[SetNumber] = " & SetNumber
    If rst.NoMatch Then
        MsgBox "No match for set " & SetNumber & " found"
        Exit Sub
    End If
    rst.Edit
    rst!setvaluetotals = strResult
    rst.Update
   
    rst.Close
End Sub

0
 

Expert Comment

by:r1sc
ID: 35046478
Hi skennelly,
i would recommend not to have an extra column in table a, but instead use a function to retrieve the comma-separated list from table B, given a parameter SetNumber.
So you can use this for displaying the calculated list.
If you want to have a input field, where you enter an new number, which you use for an INSERT- or DELETE-Statement for table B, you will need an Query which will delete all entries from B, given a SetNumber, and INSERT into tableB all entries from the new list, parsing all Numbers out of the new field´s value. But be aware, that you have to do additional checks for unchanged entries, if tableB contains more columns then just SetNumber and SetValue. Then you have to remember old list, deleting only the missing Numbers in new field, and inserting only new numbers in new field.

This can´t be done easily, but it is possible. If you can provide more information about what you want to archive, maybe there is an easier way.

best regards,
r1sc
0
 

Author Closing Comment

by:skennelly
ID: 35046621
Thank you TinTombStone. I was able to work the code to successfully complete my task. I have the "Many" side table connected to a form, so I can handle that part of the solution to your code. Many thanks and appreciation!
0

Featured Post

Space-Age Communications Transitions to DevOps

ViaSat, a global provider of satellite and wireless communications, securely connects businesses, governments, and organizations to the Internet. Learn how ViaSat’s Network Solutions Engineer, drove the transition from a traditional network support to a DevOps-centric model.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
Did you know that more than 4 billion data records have been recorded as lost or stolen since 2013? It was a staggering number brought to our attention during last week’s ManageEngine webinar, where attendees received a comprehensive look at the ma…
Familiarize people with the process of utilizing SQL Server views from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Access…
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…

740 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