Avatar billede gnukki Nybegynder
11. april 2005 - 21:10 Der er 14 kommentarer og
3 løsninger

Overførsel af tabel

Hej..

Jeg er ved at lave en database om.

Den har en tabel (tabel1), som har følgende kolonner: instruktør, kursist1, kursist2 kursist3...

Jeg vil gerne indsætte dem i en ny tabel, som kun indeholder kursist1 og instruktør.

Altså at de enkelte kursister fra tabel1 bliver delt op, så de får hver deres post.

Håber det kan lade sig gøre :)
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 21:29 #1
Jeg har lavet noget lignende da jeg skulle rydde op i en gammel db.
Jeg antager at din gamle tabel er opbygget således:
ID (felt0)
Instruktør (felt1)
Kursist1 (felt2)
Kursist2 (felt3)
osv...

Hvis vi nu siger din nye tabel er opbygget således:
ID (felt 1), Instruktør (felt 2), Kursist (felt 3)

Kør så følgende, hvor du har rettet xx til det antal kolonner der er i din gamle tabel. (Kolonnenumrene er 0-baserede, derfor xx-1. Jeg regner med at kolonne nr. 3 i din gamle tabel er den med det første kursistnavn - hvis det er nr. 2 skal der står i=1).

--------
Sub NyTabel()
Dim db As Database
Dim rsGamle As Recordset
Dim rsNye As Recordset
Dim i As Long

Set db = CurrentDb()
Set rsGamle = db.OpenRecordset("SELECT * FROM GammelTabel")
Set rsNye = db.OpenRecordset("SELECT * FROM NyTabel")

Do While Not rsGamle.EOF
        For i = 2 To xx-1
            rsNye.AddNew
                rsNye!Instruktør = rsGamle!Instruktør
                rsNye!Kursist = rsGamle.Fields(i)
            rsNye.Update
            rsNye.Movenext
    Next
    rsGamle.MoveNext
Loop
Set rsGamle = Nothing
End Sub


Sig til hvis det ikke virker.
Avatar billede gnukki Nybegynder
11. april 2005 - 21:42 #2
Hvordan indsætter jeg dette i access..?
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 21:52 #3
Når du er i Access så tryk alt+F11 for at åbne VB-editoren - er du vant til at bruge denne?
Vælg så Insert>Module
Klip og klister teksten fra og med "Sub.." til "End Sub" ind i modulet.

Nederst i VB-editoren i "Immediate"-vinduet skriver du : NyTabel og trykker Enter.
Lad mig høre hvordan det går.

Lille rettelse - brug dette:


Sub NyTabel()
Dim db As Database
Dim rsGamle As Recordset
Dim rsNye As Recordset
Dim i As Long

Set db = CurrentDb()
Set rsGamle = db.OpenRecordset("SELECT * FROM GammelTabel")
Set rsNye = db.OpenRecordset("SELECT * FROM NyTabel")

Do While Not rsGamle.EOF
        For i = 2 To xx - 1
            rsNye.AddNew
                rsNye!Instruktør = rsGamle!Instruktør
                rsNye!Kursist = rsGamle.Fields(i)
            rsNye.Update
    Next
    rsGamle.MoveNext
Loop
Set rsGamle = Nothing
End Sub
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 21:53 #4
Husk at ordet "GammelTabel" og "NyTabel" skal skiftes med dine tabelnavne.
Avatar billede gnukki Nybegynder
11. april 2005 - 21:58 #5
Den finder en fejl:

"Compile error    - User-defined type not defined"

Den markerer samtidig "db As Database" i linie 3
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:31 #6
ok - skift linjerne:
Dim db As Database
Dim rsGamle As Recordset
Dim rsNye As Recordset

med

Dim db As DAO.Database
Dim rsGamle As DAO.Recordset
Dim rsNye As DAO.Recordset
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:33 #7
nej vent lidt - du skal nok ind i Tools > References
rul ned på listen og find Microsoft DAO 3.6 Object Library og afkryds den og prøve igen.
Avatar billede gnukki Nybegynder
11. april 2005 - 22:35 #8
Beklager samme fejl...
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:36 #9
fik du det sidste med?
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:41 #10
hvis ikke det virker, så send den til mig på jesperfjoelner@hotmail.com (husk at zippe den). Så gør jeg den lige klar og du får den tilbage.
Avatar billede gnukki Nybegynder
11. april 2005 - 22:48 #11
nej det gjorde jeg ikke, og det hjalp - virker perfekt

men lige et tillægspørgssmål:

jeg har en anden tabel som er resultatet fra noget .asp med følgende felter:

ID (felt0)
Instruktør (felt1)
Kursist1 (felt2)
Sted1 (felt3)
Kursist2 (felt4)
Sted2 (felt5)
Kursist3 (felt6)
Sted3 (felt7)

Altså hvor Kursist1 passer sammen med Sted1, men hvor der altså kun er 3 kursister pr. post.

Kan jeg lave noget tilsvarende som herover, altså hvor den nye tabel kommer til at se sådan her ud:

ID (felt 1), Instruktør (felt 2), Kursist (felt 3), Sted (felt 4)
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:49 #12
ja da, lige et øjeblik...
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 22:59 #13
Prøv at se om dette virker (7 er antallet af kolonne med start på 0):

Sub NyTabel()
Dim db As Database
Dim rsGamle As Recordset
Dim rsNye As Recordset
Dim i As Long
Dim k As Long

Set db = CurrentDb()
Set rsGamle = db.OpenRecordset("SELECT * FROM GammelTabel")
Set rsNye = db.OpenRecordset("SELECT * FROM NyTabel")
Do While Not rsGamle.EOF
    k = 3
    For i = 2 To 7 Step 2
        rsNye.AddNew
            rsNye!Instruktør = rsGamle!Instruktør
            rsNye!Kursist = rsGamle.Fields(i)
            rsNye!Sted = rsGamle.Fields(k)
        rsNye.Update
        k = k + 2
    Next
    rsGamle.MoveNext
Loop
Set rsGamle = Nothing
End Sub
Avatar billede gnukki Nybegynder
11. april 2005 - 23:12 #14
Lign. fejl som opstod før, rettede linierne

Dim db As Database
Dim rsGamle As Recordset
Dim rsNye As Recordset

med

Dim db As DAO.Database
Dim rsGamle As DAO.Recordset
Dim rsNye As DAO.Recordset

men fik nu en ny fejl:

"Run-time error "3265'    - Elementet blev ikke fundet i denne samling.
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 23:16 #15
ved hvilken linje stopper den? prøv at holde musen hen over værdierne i og k - hvad er de?
Prøv at tjekke din tabel - hvor meget nåede den at lave før den stoppede?
Du har referencen til DAO 3.6 i Tools > References? Det kører umiddelbart her.
Avatar billede gnukki Nybegynder
11. april 2005 - 23:21 #16
Fandt fejlen, bare en dumme-fejl

Alt virker som det skal..

Tak for hjælpen og hermed dine point! :)
Avatar billede jesperfjoelner Nybegynder
11. april 2005 - 23:39 #17
Jo tak - held og lykke med det. Jeg havde en database med 30-40 tabeller som blev normaliseret til ca 5. tabeller med de par tricks.
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