Avatar billede solopolo Nybegynder
21. december 2005 - 17:36 Der er 17 kommentarer og
1 løsning

Kombinere værdier i en felt

Hej,
Er der nogen som ved om man kan kombinere forskellige værdier i en felt som en record per nøgle eller ej?
F.eks. en tabel har to felter, Kundenr. og Kundetype hvor en kunde kan have flere typer og værdierne er:
Kundenr.    Kundetype
2222            A
2222            B
2222            C

Jeg vil gerne kombinere værdier sådan,
Kundenr.    Kundetype
2222          A, B, C

Er det muligt?
Mvh.
POLO!
Avatar billede terry Ekspert
21. december 2005 - 19:19 #1
yes its possible but it would need to be done in code
Avatar billede solopolo Nybegynder
22. december 2005 - 12:07 #2
Thanks for replying terry. I do have some understanding of VB codes. Would you please try to explain how? I hope its not too complex.
Avatar billede solopolo Nybegynder
22. december 2005 - 12:41 #3
if it's too complex then may be I should assign more points to it!
Avatar billede jesperfjoelner Nybegynder
22. december 2005 - 16:47 #4
hvordan vil du have vist resultatet? Som forespørgsel? I en formular?
Avatar billede solopolo Nybegynder
23. december 2005 - 09:46 #5
Som forespørgsel
Avatar billede terry Ekspert
23. december 2005 - 11:14 #6
So you want to keep your table as it is?

You will need to make a query which selects distinct KundeNr (only one record for each kundenr). Then you need to make a function in a module which you call from the query. You need to pass the kundeNr as a arguemnt to the function, and theh function is to return a string.

In the function you need to open a recordset which selects all KundeType for the current KundeNr.

Loop through the recordset and concatenate each KundeType to a string with a ","

When finished looping you need to remove the last "," from the string. Then return the string to the query.
Avatar billede jesperfjoelner Nybegynder
23. december 2005 - 23:32 #7
Terry > Du har beskrevet løsningen, men eg måtte lige forsøge at lave det.
Jeg kan ikke umiddelbart se andre måder at gøre det på, men hvis det er store tabeller tror jeg ikke det kører specielt hurtigt.

Først funktionen:
----------
Function Concat(kundenr As Long) As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sTyper As String
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT kundetype FROM table1 WHERE kundenr=" & kundenr)
Do While Not rs.EOF
    sTyper = sTyper & rs!kundetype & ", "
    rs.MoveNext
Loop
Concat = Left(sTyper, Len(sTyper) - 2)
Debug.Print Concat
rs.Close
Set rs = Nothing
Set db = Nothing
End Function
----------

Og så skal den bruges således i en forespørgsel:

SELECT kundenr, concat([kundenr]) AS eks FROM Table1 GROUP BY kundenr, concat([kundenr])
Avatar billede jesperfjoelner Nybegynder
23. december 2005 - 23:32 #8
solopolo > Funktionen skal du så bare sætte ind i et modul.
Avatar billede terry Ekspert
24. december 2005 - 10:40 #9
Looks good Jesper. And I agree that with large tables it may be rather slow.

Have a good Christmas everyone
Avatar billede solopolo Nybegynder
27. december 2005 - 12:22 #10
Jesper, når jeg køre din løsning så stopper module på "db As DAO.Database" med fejl medl. "Compile error: User-defined type not defined". Hvad gøre jeg forkert?
Avatar billede jesperfjoelner Nybegynder
27. december 2005 - 13:26 #11
Du mangler en reference til DAO 3.6

Gå ind i VB-editoren > Tools > references.
Scroll ned og find "Microsoft DAO 3.6" (el. 3.51) og afkryds den.
Så skulle det køre.
Avatar billede jesperfjoelner Nybegynder
27. december 2005 - 13:30 #12
du kan evt. fjerne referencen til ADO 2.1 hvis du ikke bruger den.
Hvis du ikke ved, om du bruger den, gør du det nok ikke.
Avatar billede solopolo Nybegynder
27. december 2005 - 13:42 #13
Nu kører det fint, tusind tak Jesper.
Bare et spørgsmål til: det kørte første efter jeg har lavet "Kundenr" felt om fra tekst til tal. Er denne løsning kun til Tal type felter?
Avatar billede jesperfjoelner Nybegynder
27. december 2005 - 13:45 #14
Nej jeg tror sagtens det kan køre hvis "kundenr" er tekst.

Så skal denne linje i funktionen:
Set rs = db.OpenRecordset("SELECT kundetype FROM table1 WHERE kundenr=" & kundenr)

ændres til:
Set rs = db.OpenRecordset("SELECT kundetype FROM table1 WHERE kundenr='" & kundenr & "'")
Avatar billede solopolo Nybegynder
27. december 2005 - 15:59 #15
Yes, det virker fint med tekst felt :-)
Avatar billede jesperfjoelner Nybegynder
27. december 2005 - 16:02 #16
Tak for point. Godt det virker.
Hvis dit kundenr altid er et tal bliver der nok ingen problemer, men hvis kundenr kan være f.eks. "A2222" eller lignende skal dette nok ændres:

Function Concat(kundenr As Long) As String

til

Function Concat(kundenr As string) As String

Det burde man nok gøre under alle omstændigheder, da du nu har sat kundenr til at være tekst i tabellen.
Avatar billede solopolo Nybegynder
27. december 2005 - 16:14 #17
Det var godt at du lige nævnte det for der er faktisk blandet kundenr i drift databasen.
Tak for denne gang :-)
Avatar billede jesperfjoelner Nybegynder
27. december 2005 - 16:14 #18
Selv tak :-)
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