Avatar billede bejstrup Juniormester
11. oktober 2005 - 08:46 Der er 8 kommentarer og
1 løsning

Automatisk oprettele af Acces database

Hej eksperter.
Jeg har 10 Acces databaser, én for hver af mine projektledere (ens opbygget, og navngvet efter projektlederens arb.nummer). Jeg ønsker via en brugerflade i Excel at kunne oprette en ny database hvis jeg ansætter en ekstra projektleder, således at dette ikke skal ske manuelt. Opbygningen af databasen skal være som for de øvrige 10 projektledere. Jeg har desværre ingen ide om hvordan sådan en VBA-kode eventuelt skal se ud. Jeg forventer ikke at problemet kan løses, men man har jo lov at håbe :-)
Avatar billede supertekst Ekspert
11. oktober 2005 - 09:17 #1
Det kan du godt forvente.....:-)

Har oprettet databaser fra Word-VBA - så skulle det vel nok kunne lade sig gøre fra Excel - men hvorfor Excel?

Alle egenskaber i en database kan aflæses via VBA og således danne grundlag for en ny.

Hvordan griber vi det an?
Avatar billede bejstrup Juniormester
11. oktober 2005 - 09:32 #2
Jeg vil anvende Excel fordi der er her alle mine brugerflader er programmeret fra, og her alle mine grafer udarbejdes fra. Jeg havde forestillet mig at man kunne:
1. kopierer en af de eksisterende databaser (evt. en tom grunddatabase, som jeg kender adressen på)
2. Omdøbe databasen
3. Slette alle nuværende data.
Således har jeg en ny database der er tom, og døbt et navn som brugeren via en brugerflade bliver bedt om at angive.
Blot en ide, men jeg har som sagt inegn ide om hvordan en sådan VBA-kode ser ud.
Avatar billede supertekst Ekspert
11. oktober 2005 - 09:45 #3
OK - jeg vil gerne forsøge - vender tilbage senere!
Avatar billede bejstrup Juniormester
11. oktober 2005 - 09:49 #4
takker :-)
Avatar billede supertekst Ekspert
11. oktober 2005 - 10:29 #5
Nedenstående kode er indlagt i en Excel-VBA: ThisWorkBook
OBS - for at kunne opererer med en database fra Excel skal der sættes en reference:
I Excel VBA - menupunktet  Tools | References | afkryds Microsoft DAO 3.6 Object Library - 3.6 passer til de seneste Office-versioner (DAO = DataAdgangsObjekt)

Der er IKKE i kode indlagt individuel navngivning af den nye DB

Const dbBasis = "d:\eksperten\autodb\DbBasis.mdb"  'tilpas til din basisDB
Const dbKopi = "d:\eksperten\autodb\DbKopi.mdb"    'do - kopien
Dim db As Database
Sub StartProgram()
    udførKopieringAfDb
    findTabeller
End Sub
Private Sub udførKopieringAfDb()
    FileCopy dbBasis, dbKopi
End Sub
Private Sub findTabeller()
Dim tdef As TableDef
    Set db = OpenDatabase(dbKopi)
   
    For Each tdef In db.TableDefs
        If InStr(LCase(tdef.Name), "msys") = 0 Then  'Microsoft systemtabellen
            sletTabelData tdef.Name
        End If
    Next tdef
   
    db.Close
End Sub
Private Sub sletTabelData(tabelnavn)
Dim tabel, f
    Set tabel = db.OpenRecordset(tabelnavn)
   
    For f = 1 To tabel.RecordCount
        With tabel
            .Delete
            .MoveNext
        End With
    Next f
    tabel.Close
End Sub
Avatar billede bejstrup Juniormester
11. oktober 2005 - 11:01 #6
Super, så klarer jeg selv resten "forhåbentlig" :-)
takker, så hvis du smider et svar sååååå!!!
Avatar billede bejstrup Juniormester
11. oktober 2005 - 11:08 #7
øhh, hvis du har et hint til hvordan jeg får den navngivet så vil jeg være taknemmelig :-)
Avatar billede supertekst Ekspert
11. oktober 2005 - 11:39 #8
Selv tak - du fåt lige en opdatering, hvori dit sidste spørgsmål også er løst - herudover sker der en komprimering af kopidatabasen - således at evt. autonummereringsfelter i tabellerne igen begynder med 1.

Version 2:
Const dbBasis = "d:\eksperten\autodb\DbBasis.mdb"
Const dbKopi = "d:\eksperten\autodb\DbKopi.mdb"
Dim db As Database, nytDBnavn
Sub StartProgram()
    udførKopieringAfDb
    findTabeller
   
    navngivNyDB
    komprimerNyDB
    sletKopiDB
End Sub
Private Sub udførKopieringAfDb()
    FileCopy dbBasis, dbKopi
End Sub
Private Sub findTabeller()
Dim tdef As TableDef
    Set db = OpenDatabase(dbKopi)
   
    For Each tdef In db.TableDefs
        If InStr(LCase(tdef.Name), "msys") = 0 Then
            sletTabelData tdef.Name
        End If
    Next tdef
   
    db.Close
End Sub
Private Sub navngivNyDB()
    nytDBnavn = InputBox("Navn på ny database")
End Sub
Private Sub komprimerNyDB()
    DBEngine.CompactDatabase dbKopi, "d:\eksperten\autodb\" + nytDBnavn + ".mdb"
End Sub
Private Sub sletKopiDB()
    Kill dbKopi
End Sub
Private Sub sletTabelData(tabelnavn)
Dim tabel, f
    Set tabel = db.OpenRecordset(tabelnavn)
   
    For f = 1 To tabel.RecordCount
        With tabel
            .Delete
            .MoveNext
        End With
    Next f
    tabel.Close
End Sub
Avatar billede bejstrup Juniormester
11. oktober 2005 - 11:56 #9
takker mange gange :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel