Avatar billede tigerdyr2007 Praktikant
16. februar 2010 - 16:26 Der er 2 kommentarer og
1 løsning

Lave relation til tekst-streng

Hej

I forbindelse med eksport af data til et trykkeri har jeg brug for at lave lidt om på nogle data.
Jeg har følgende:

tbl_rekv:
ID; Navn
1; Jens
2; Peter
3; Christian

tbl_conncetions:
ID; rekvID; initialer
1; 1; ksh
2; 2; ma
3; 2; ksh
4; 2; nap
5; 3; ma
5; 3; ksh

Det jeg har brug for er en forespørgsel som 'tranformerer' det til:

qry:
rekvID; Navn; connections
1; Jens; ksh
2; Peter; ma, ksh, nap
3; Christian; ma, ksh

Altså at den udvælger alle de relationer der er i connections og bygger en streng op i en særskilt kollonne med initialerne fra connections. Håber ovenstående forklarer problemet.
Nogen bud?
Avatar billede terry Ekspert
16. februar 2010 - 20:20 #1
you cant do that (Or at least I dont think) in SQL, you will need to code it.
Avatar billede terry Ekspert
16. februar 2010 - 20:21 #2
Oops > Try making a pivot query!
Avatar billede tigerdyr2007 Praktikant
17. februar 2010 - 16:30 #3
Hej

Jeg er endt med at kode mig ud af det, og lagre værdien i et felt i tabellen, så må jeg bare opdatere hele den liste efter behov.
Kunne ikke løse problemet med pivot.

Her er den kode jeg endte med at bruge til hvis der er nogen som skal inspireres.

Option Compare Database
Option Explicit

Public Function update_RR_contact_field()
On Error GoTo Errorhandler

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim rst2 As DAO.Recordset
    Dim rst3 As DAO.Recordset
    Dim RR_contacts_string As String
    Dim sSQL As String
    Dim sSQL2 As String
    Dim sSQL3 As String
    Dim sSQL4 As String

    Dim temp As Integer
    temp = 0
    'DoCmd.Hourglass True
   
    'Vælg alle de rekvirenter som har en relation til RR-person
    sSQL = "SELECT tbl_rekvirent.ID, tbl_RR_person.forkortelse, tbl_rekvirent_RR_person.primarykontact, tbl_rekvirent_RR_person.julekort " & _
        "FROM tbl_rekvirent INNER JOIN (tbl_RR_person INNER JOIN tbl_rekvirent_RR_person ON tbl_RR_person.ID = tbl_rekvirent_RR_person.RR_personID) ON tbl_rekvirent.ID = tbl_rekvirent_RR_person.rekvirentID ORDER BY tbl_rekvirent.ID;"
    Set db = CurrentDb
    Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot)
   
    DoCmd.SetWarnings False
   
    If Not rst.BOF Then rst.MoveFirst
    Do Until rst.EOF
        RR_contacts_string = ""
        'Find de primære relationer
        sSQL2 = "SELECT tbl_RR_person.forkortelse " & _
            "FROM tbl_rekvirent INNER JOIN (tbl_RR_person INNER JOIN tbl_rekvirent_RR_person ON tbl_RR_person.ID = tbl_rekvirent_RR_person.RR_personID) ON tbl_rekvirent.ID = tbl_rekvirent_RR_person.rekvirentID " & _
            "WHERE (((tbl_rekvirent.ID)=" & rst.Fields(0) & ") AND ((tbl_rekvirent_RR_person.primarykontact)=True));"
        Set rst2 = db.OpenRecordset(sSQL2, dbOpenSnapshot)
       
        If Not rst2.BOF Then rst2.MoveFirst
        Do Until rst2.EOF
            RR_contacts_string = RR_contacts_string & rst2.Fields(0) & " "
            'MsgBox rst2.Fields(0), vbOKOnly, RR_contacts_string & "rst2" ' testudlæsning
        rst2.MoveNext
        Loop
       
        'Find sekundære relationer
        sSQL3 = "SELECT tbl_RR_person.forkortelse " & _
            "FROM tbl_rekvirent INNER JOIN (tbl_RR_person INNER JOIN tbl_rekvirent_RR_person ON tbl_RR_person.ID = tbl_rekvirent_RR_person.RR_personID) ON tbl_rekvirent.ID = tbl_rekvirent_RR_person.rekvirentID " & _
            "WHERE (((tbl_rekvirent.ID)=" & rst.Fields(0) & ") AND ((tbl_rekvirent_RR_person.primarykontact)=False));"
        Set rst3 = db.OpenRecordset(sSQL3, dbOpenSnapshot)
       
        If Not rst3.BOF Then rst3.MoveFirst
        Do Until rst3.EOF
            RR_contacts_string = RR_contacts_string & rst3.Fields(0) & " "
            'MsgBox rst3.Fields(0) & " - " & rst.Fields(0), vbOKOnly, RR_contacts_string & "rst3" ' testudlæsning
        rst3.MoveNext
        Loop
       
        RR_contacts_string = Left(RR_contacts_string, Len(RR_contacts_string) - 1) 'Fjern sidste charecter
       
        'MsgBox RR_contacts_string, vbOKOnly, rst.Fields(0) ' testudlæsning
        'Opdater feltet rekvirenttabellen
        sSQL4 = "UPDATE tbl_rekvirent SET tbl_rekvirent.RR_contacts = '" & RR_contacts_string & "' WHERE (((tbl_rekvirent.ID)=" & rst.Fields(0) & "));"
        DoCmd.RunSQL sSQL4
       
        'Afbryder til begrænset test
        'temp = temp + 1
        'If temp = 5 Then
        '    GoTo Exit_fcn
        'End If
    rst.MoveNext 'næste rekvirent
    Loop
   
    GoTo Exit_fcn
   
Exit_fcn:
    'DoCmd.Hourglass = False
    DoCmd.SetWarnings True
    Set db = Nothing
    Set rst = Nothing
    Set rst2 = Nothing
    Set rst3 = Nothing
    Exit Function

Errorhandler:
    MsgBox Err, vbOKOnly, "Fejl"
    GoTo Exit_fcn
   
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester