Avatar billede -anders- Juniormester
31. oktober 2017 - 09:14 Der er 6 kommentarer og
2 løsninger

Oprettelse af ny tabel på basis af data i felter fra en anden tabel herunder et memofelt

Kære eksperter

Denne er her tricky, og jeg har ikke kunne finde noget på nettet der kan hjælpe, så nu prøver jeg her. Jeg arbejder i Access 2010.

Jeg har en tabel med data i (ca, 500 poster). Tabellen er navngivet TBLdata, og indeholder nedenståender felter.

Felt1
Felt2
Felt3
Felt4
Felt5

Felterne fra Felt1 til Felt4 er af datatypen tekst, Felt5 er af datatypen, Memo.
Der er data i alle felterne.

Felterne fra Felt1 til Felt 4 indeholder tekst uden linjeskift
Felt5 (som jo er et memofelt) indeholder udenlukkende tekst med linjeskift (der er aldrig dobbelte linjeskift, kun enkelte) fx:

Information 1
Information 2
Information 3
Information 4

Der kan i det enkelte poster sagtens stå mere i memofeltet, men ens for alle poster er, at der kun er et enkelt linjeskift.
Når jeg viser en post ser det i dag sådan ud:

anj, Anders Jensen, Danmark, e-mailadresse
Information 1
Information 2
Information 3
Information 4

Problem:
Jeg vil gerne oprette en ny tabel hvor koden skal oprette en ny post for hver linje der er i memofeltet for de enkelte poster i TBLdata, så data i den nye tablel vil se sådan ud:

anj, Anders Jensen, Danmark, e-mailadresse, Information 1
anj, Anders Jensen, Danmark, e-mailadresse, Information 2
anj, Anders Jensen, Danmark, e-mailadresse, Information 3
anj, Anders Jensen, Danmark, e-mailadresse, Information 4

Er der nogen der ved om dette er muligt, og i så fald hvordan? Som sagt har jeg søgt en del på nettet, men finder ikke noget.
Jeg har en lille Test database (Access 2010) som godt kan sendes, hvis det er :-)

På forhånd tak for hjælpen.

Hilsen
Anders
Avatar billede terry Ekspert
31. oktober 2017 - 10:12 #1
Hi Anders
Can you send the dB to me "ekspertenATsanthell.dk" and I'll take a look.
AT = @
Its obviously going to require a bit of code to do it but would think it is possible.

I'm also busy with other things but will reply when I have time.

Terry
Avatar billede -anders- Juniormester
31. oktober 2017 - 10:23 #2
Hej Terry

Tak for dit indlæg. Jeg har netop sendt testdatabassen til dig som en .zip fil.
Avatar billede terry Ekspert
31. oktober 2017 - 12:55 #3
You can have a button on the form and in the OnClick event use this code which assumes the fields are the same as in TBLData.


Dim strField5 As String
Dim strArray() As String
Dim intCount As Integer
Dim strSQL As String

    strArray() = Split(Felt5, vbCrLf)
    DoCmd.SetWarnings False
   
    For intCount = LBound(strArray) To UBound(strArray)
        strSQL = "INSERT INTO TBLNewData VALUES('" & Felt1 & "', '" & Felt2 & "', '" & Felt3 & "', '" & Felt4 & "', '" & Trim(strArray(intCount)) & "')"
       
        DoCmd.RunSQL strSQL
       
    Next

    DoCmd.SetWarnings True
Avatar billede terry Ekspert
31. oktober 2017 - 13:01 #4
You dont need Dim strField5 As String
Avatar billede -anders- Juniormester
31. oktober 2017 - 13:42 #5
Hej Terry

Tak for indsatsen, din kode virker perfekt. Ville det være muligt at få koden til at løbe alle poster igennem fra TBLdata, så man ikke "manuelt" skal eksekvere koden for hver post!

PS. Jeg sender dig lige en mail omkring betragtninger på databasen.
Avatar billede terry Ekspert
31. oktober 2017 - 14:40 #6
Function Copy2TBLNewData()

Dim rs As Recordset

Dim strArray() As String
Dim intCount As Integer

Dim strSQL As String


    strSQL = "SELECT * FROM TBLData"
   
    Set rs = CurrentDb.OpenRecordset(strSQL)
   
    If Not rs.BOF And Not rs.EOF Then
       
        DoCmd.SetWarnings False
       
        rs.MoveFirst
        While (Not rs.EOF)

            strArray() = Split(rs.Fields(4), vbCrLf)

            For intCount = LBound(strArray) To UBound(strArray)
 
                strSQL = "INSERT INTO TBLNewData VALUES('" & rs.Fields(0) & "', '" & rs.Fields(1) & "', '" & rs.Fields(2) & "', '" & rs.Fields(3) & "', '" & Trim(strArray(intCount)) & "')"
       
                DoCmd.RunSQL strSQL
       
            Next
           
            rs.MoveNext

        Wend
       
        DoCmd.SetWarnings True
   
    End If

End Function
Avatar billede -anders- Juniormester
31. oktober 2017 - 15:18 #7
Hej Terry

Din kode til at løbe hele TBLdata igennem virker perfekt. Så nåede jeg endnu engang målstregen, og kun takket være din store hjælp. Du skal have mange tak for indsatsen.

Ha, en god Halloween aften :-)
Avatar billede terry Ekspert
31. oktober 2017 - 15:24 #8
Thanks, same to you Anders ;-)
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