velden concatineren uit verschillende records

Status
Niet open voor verdere reacties.

thomasvaer

Gebruiker
Lid geworden
29 nov 2009
Berichten
20
Hoe stel ik een nieuwe variabele samen uit de inhoud van 2 (of meer) velden die niet hetzelfde record zitten? Eventuele beperking tot 255 chrs is geen bezwaar.
Voorbeeld, tabel:
id naam kleur
1 jan blauw
2 piet grijs
3 gerrit grijs
vraag: Geef samengestelde string van [naam] als [kleur]=grijs
Resultaat moet dus zijn: result="piet, gerrit"
Elders las ik dat deze manoeuvre in een querie niet kan maar wel met VBA. Nu ben ik dat niet machtig maar wellicht toch te helpen... Bedankt!
 
Daar kon je wel eens gelijk in hebben...
Als je geen enkele programmeerervaring hebt, vraag ik me af of het zinvol is om je zo'n vraag te stellen. Maar goed, deze procedure voert de handeling netjes uit...

Code:
Private Sub Test_Click()
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim sTemp As String

strSQL = "SELECT Naam, Kleur From Kleuren WHERE (Kleur='grijs');"
Set rs = New ADODB.Recordset
rs.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockPessimistic

Do While Not rs.BOF And Not rs.EOF
    sTemp = sTemp & rs.Fields("Naam").Value & ", "
    rs.MoveNext
Loop
sTemp = Trim(sTemp)
Do While Right(sTemp, 1) = ","
    sTemp = Left(sTemp, Len(sTemp) - 1)
Loop

MsgBox sTemp

End Sub
 
Dat ziet er goed uit

Bedankt Michel, ziet er erg goed uit.
Ja, ik leef boven mijn stand en zal dus nu verder zoeken hoe ik jouw routine, die ik zowaar denk te kunnen volgen, kan toepassen.
Ik hoop hem als routine in de modules op te kunnen nemen en daarna als functie te kunnen inzetten. Is dat een goeie vervolgrichting?
 
Dan vind je dit nog mooier.... Het is nu een Functie, die je op verschillende plaatsen kunt gebruiken.


Code:
Function ConCat(Veld As String, WaardeVeld As String, Waarde As String, Tabel As String) As String
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim sTemp As String

strSQL = "SELECT " & Veld & ", " & WaardeVeld & " From " & Tabel & " WHERE (" & WaardeVeld & "='" & Waarde & "');"
Set rs = New ADODB.Recordset
rs.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockPessimistic

Do While Not rs.BOF And Not rs.EOF
    sTemp = sTemp & rs.Fields(Veld).Value & ", "
    rs.MoveNext
Loop
sTemp = Trim(sTemp)
Do While Right(sTemp, 1) = ","
    sTemp = Left(sTemp, Len(sTemp) - 1)
Loop

ConCat = sTemp

End Function

Op de plaatjes staat hoe je 'm aanroept, en hoe het er uitkomt.
 

Bijlagen

  • Tekstvak met Formule.jpg
    Tekstvak met Formule.jpg
    5,7 KB · Weergaven: 53
  • Resultaat.jpg
    Resultaat.jpg
    3,7 KB · Weergaven: 56
Schitterend

Dank Michel. Dit werkt als ...
Zo kan ik horden lopen met andermans benen.
Beetje aangepast zodat de hele tabel wordt doorlopen ook zo dat ik niet de kleur zelf hoef in te geven, die komt er als veldwaarde in te staan.

Function ConCat
.............
Do While Not rs.BOF And Not rs.EOF
sTemp = sTemp & rs.Fields([Veld]).Value & ", "
rs.MoveNext
Loop
.........

De invoer in de uitdrukking in mijn query moet dan meeveranderen in "veld","waardeveld","[waarde]","tabel".

Al met al geweldig bruikbaar en voor mij een doorbraak. Bedankt ook voor de vlotte reacties.
mvrgr. Thomas
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan