Avatar billede dougheffernan Nybegynder
29. juli 2003 - 12:17 Der er 9 kommentarer og
1 løsning

Kopiering af database (VBA)

Er det muligt i en Access-database, at lave en funktion, som kopierer den åbne database i 4 eksemplarer (så der er 5 i alt), navngiver disse samtidig og indsætter en post i hver enkelt database, som er unik for den database (en sti til der hvor selve dataene ligger, de nævnte databaser er front-end's).
Avatar billede clausc Nybegynder
29. juli 2003 - 13:13 #1
Har ikke lige en Access ved hånden; men prøv noget i stil med:
1) Tilføj et modul
2) Tools | References: tilføj MS scripting engine
3) Lav en sub og kopier filen vha FileSystemObject
4) Åbn de nye mdb'er med OpenDB og indsæt
Avatar billede overchord Nybegynder
29. juli 2003 - 17:38 #2
Den foerste del med at distrbuere frontends kan goeres vha en normal Filecopy-kommando.Antager at du har stierne liggende i en streng i strPaths(1-4)


set db1 = UNCSti\Mastercopy.mdb

For i = 1 to 4
Filecopy db1, strPaths(i) & "Databasecopy.mdb"
next i

Jeg har selv arbejdet med scripts der forbinder front-ends med en backend. Jeg
sletter alle tidligere linkede tabeller, og genopretter dem istedet vha.
Dim dbs as database, db2 as database
set dbs = currentdb
set db2 = opendatabase(UNCsti\Backend.mdb)

For i = 1 To antaltabeller
    dbs.Tabeldefs.Delete strTblNames(i)
    DoCmd.TransferDatabase acLink, "Microsoft Access", db2.Name, acTable, strTblNames(i), strTblNames(i)
Next i
(Hvor tabelnaqvne ligger is strTblNames())
Der er dog et par ting du skal vaere forsigtig med.
1)Du kan teoretisk set bruge
For each tabledef in db1
docmd.transfer......
Men der er en del skjulte tabeller i Access hvor du kan faa problemer med rettigheder og om de er i brug mens du proever at overfoere.
2) Afhaengigt af hvordan dit netvaerk er sat op kan mapping at netvaerksdrev variere, hvorfor det er en god ide altid at bruge UNC stier.

Haaber det hjaelper :-)
Avatar billede overchord Nybegynder
29. juli 2003 - 17:40 #3
fejl i den foerste kodelinje:
set db1 = UNCSti\Mastercopy.mdb


skal enten vaere
set db1 = currentdb

eller
set db1 = opendatabase("UNCSti\Mastercopy.mdb")
Avatar billede dougheffernan Nybegynder
30. juli 2003 - 12:09 #4
Jeg får en fejl med denne kode (Type mismatch)

Set db1 = CurrentDb
Dim strpaths(1 To 4) As String
strpaths(1) = "C:\db\1"
strpaths(2) = "C:\db\2"
strpaths(3) = "C:\db\3"
strpaths(4) = "C:\db\4"

For i = 1 To 4
  FileCopy db1, strpaths(i) & "\Databasecopy.mdb"
Next i
Avatar billede overchord Nybegynder
30. juli 2003 - 12:13 #5
preov at laeve det om til
Set db1 = CurrentDb
Dim strpaths(1 To 4) As String
strpaths(1) = "C:\db\1\Databasecopy.mdb"
strpaths(2) = "C:\db\2\Databasecopy.mdb"
strpaths(3) = "C:\db\3\Databasecopy.mdb"
strpaths(4) = "C:\db\4\Databasecopy.mdb"

For i = 1 To 4
  FileCopy db1, strpaths(i)
Next i
Avatar billede dougheffernan Nybegynder
30. juli 2003 - 12:17 #6
FileCopy forventer en streng som parameter, og får et objekt af typen Database.
Avatar billede dougheffernan Nybegynder
30. juli 2003 - 12:19 #7
Samme resultat
Avatar billede dougheffernan Nybegynder
30. juli 2003 - 12:21 #8
Kan man ikke som i Java få konverteret en CurrentDB(type: Database) til en streng?
Avatar billede clausc Nybegynder
30. juli 2003 - 14:55 #9
Prøv med "Application.CodeProject.FullName" istedet for db1. Det virker under Access2k. Mener noget tilsvarende kunne findes som property på Application-objektet i Access97

/Claus
Avatar billede overchord Nybegynder
04. august 2003 - 21:22 #10
Aaarh hvis du bare skriver
db1.name i file-copy kommandoen skulle det virke!!
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