07. maj 2013 - 18:30Der er
5 kommentarer og 1 løsning
kobling af 2 tabeller i Access 2010, hvor "nøglen" i den ene tabel er en del af en tekststreng i den anden tabel - dvs. de joinforbundne felter er ikke ens.
Jeg har 2 tabeller, som jeg gerne vil have koblet sammen i Access.
den første tabel ser sådan ud:
bruger kunde konti Karl 0001,0002,0003,0004 Kurt 0005,0006,0007 Jens 0008,0009,0010
Den anden tabel lister forskellige attributer til den enkelte kundekonto, dvs:
kundekonti konto navn aktiv 0001 afdeling A Ja 0002 afdeling B Ja 0003 afdeling C Ja 0004 afdeling D Ja 0005 afdeling E nej 0006 afdeling F Ja 0007 afdeling G Ja 0008 afdeling H nej 0009 afdeling I Ja 0010 afdeling J Ja
Problemt er at kontiene tilknyttet den enkelte bruger ligger i et felt adskildt af komma, så jeg kan ikke koble tabellerne på normalvis via en forespørgsel, da jeg ikke har en entyddig nøgle.
Kan der eksempelvis generes et udtyk via udtryksgeneratoren, som går ind og søger på kundekontiene på den enkelte bruger og som kan lave en returning af forskellige attributer på de enkelte kundekonti tilhørende den enkelte bruger fra tabel 2?
et resultat kunne se ud som følger
Bruger kundekonti konto navn aktiv Karl 0001 afdeling A Ja Karl 0002 afdeling B Ja Karl 0003 afdeling C Ja Karl 0004 afdeling D Ja Kurt 0005 afdeling E nej Kurt 0006 afdeling F Ja Kurt 0007 afdeling G Ja Jens 0008 afdeling H nej Jens 0009 afdeling I Ja Jens 0010 afdeling J Ja
Det har jeg også overvejet, men hvordan får jeg flyttet de kommaadskildte værdier flyttet til til rækkeniveau? er det muligt at gøre via en funktion? Datamængden er på ca. 1550 brugere, som hver har adgang til mellem 1 og 60 kundekonti, så det er ikke muligt at gøre det manuelt
Kunne jeg bare transformere værdierne i kundekonti kolonnen til seperate rækker er mit problem sådan set løst, da jeg så kan sammenflette kundekontiattributerne med brugerne via en ny forespørgsel.
Forudsætninger: Tabel1 indeholder dine data i felterne Bruger og Konti Tabel2 oprettes med to felter: Bruger og Konto (begge tekst)
Kode: Sub OpsplitPoster() Dim Rst As Recordset Dim p As Integer Dim Konti As String Dim k As String
Set Rst = CurrentDb.OpenRecordset("Tabel1", dbOpenSnapshot) With Rst Do Konti = !Konti p = InStr(1, Konti, ",") While p > 0 k = Left(Konti, p - 1) Call OpretPost(!Bruger, k) Konti = Mid(Konti, p + 1) p = InStr(1, Konti, ",") Wend Call OpretPost(!Bruger, Konti) .MoveNext Loop Until .EOF .Close End With Set Rst = Nothing End Sub
Sub OpretPost(Bruger As String, Konto As String) DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO Tabel2(Bruger,Konto)" & _ " SELECT '" & Bruger & "','" & Konto & "'" DoCmd.SetWarnings True End Sub
Hvis du opretter Konto-feltet i Tabel2 som et tal-felt, skal OpretPost rutinen oprettes som:
Sub OpretPost(Bruger As String, Konto As Long) DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO Tabel2(Bruger,Konto)" & _ " SELECT '" & Bruger & "'," & Konto DoCmd.SetWarnings True End Sub
1. Opret Tabel2 (eller hvad du nu vælger at kalde den) 2. Indsæt koden i et vilkårligt modul (evt. Alt-F11, Insert/Module) 3. Ret tabel- og feltnavne, så de passer med din virkelighed. 4. Placer markøren i rutinen OpsplitPoster og tryk F5 (Kør)
PS: Nu er det jo ikke point, men gode løsninger, der driver eksperten; men det kunne måske undre nogen, at du i samme hug vælger at stille yderligere spørgsmål OG samtidig nappe pointene selv. OBS: Du skal ikke lave det om! Pointene er som sagt kun for sjov.
Hov det må du undskylde - det var meningen at du skulle have pointene :-( jeg troede at jeg kunne skrive et sidste spørgsmål samtidig med at du fik dem. Det beklager jeg. Er der en anden måde du kan få dem på så må du sige til. Men tusind tak for hjælpen
Synes godt om
Ny brugerNybegynder
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.