Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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
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
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.
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.
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.