Avatar billede nih Novice
13. maj 2009 - 13:31 Der er 4 kommentarer og
1 løsning

konverter kædede tabeller til lokale

Hej eksperter

Er der mon nogen der har en vba function der kan konverter alle kædede tabeller i en database til lokale - helst med relationerne fra backend intakte

formålet med functionen er at vores produktions db er opbygget af en frontend plus backend. Af og til er der behov for at sende en kopi af databasen ud af huset.

Jeg har en function der laver en kopi af frontend, men mangler så en funktion, der konvertere tabellerne til lokale.

mvh Niels
Avatar billede Slettet bruger
13. maj 2009 - 14:44 #1
Skal testes!

Sub importLinkedTables()
    Dim tdf As TableDef
   
    For Each tdf In CurrentDb.TableDefs
        With tdf
            If (Len(.Connect) > 0) Then
                DoCmd.DeleteObject acTable, .name
                DoCmd.TransferDatabase acImport, "<find this by making a macro>", Mid(.Connect, 11), acTable, .name, .name
            End If
        End With
    Next
End Sub

De oprindelige links til kædede tabller slettes, så de importere navne kommer til at svare til de oprindelige - og databasen skal jo heller ikke distribueres med links til noget lokalt.
Lav det i en kopi af frontenden. Jeg vil lade det op til dig at teste, om man kan slette tabeler i en tabledef  loop, og om egenskaberne .connect og .name eksisterer når linket til tabellen er slettet - hvis ikke skal der bare buffes.
Avatar billede nih Novice
13. maj 2009 - 17:26 #2
Hej

tak for hjælpen du har ledt mig på rette vej - håber jeg :)
således ser min kode ud - men jeg mister alle relationer


Function copyDb()
       
    Dim appAccess As Access.Application
    Dim NytNavn As String
   
    'kopier databasen
    NytNavn = "EBF_" & Date & ".mdb"
    With CurrentProject
        Shell "cmd /c copy """ & .FullName & """ """ & Replace(.FullName, .Name, _
        NytNavn), vbHide
    End With
    'åben og kopier tabeller fra backend
    Set appAccess = CreateObject("Access.Application")
    appAccess.OpenCurrentDatabase CurrentProject.path & "\" & NytNavn, False
   
    appAccess.Run "flettabeller"
    appAccess.CloseCurrentDatabase
    Set appAccess = Nothing
   
    'åben exploer
    Shell "Explorer.exe /n,/e," & CurrentProject.path, vbNormalFocus
   
End Function

Function fletTabeller()

    '' MÅ KUN KØRES FRA KOPIEN !!!!!!!!!!!!!!!!!!!!!
   
    Dim db As DAO.Database
    Set db = CurrentDb
   
    Dim backend As String
    Dim tdef As TableDef
    Dim tblNavn As String
   
    backend = CurrentProject.path & "\data\ebf_data.mdb"
 
    For Each tdef In db.TableDefs
        If Left(tdef.Connect, 10) = ";DATABASE=" Then
            tblNavn = tdef.Name
            db.Execute "DROP TABLE " & tblNavn
            DoCmd.TransferDatabase acImport, "Microsoft Access", backend, acTable, tblNavn, tblNavn
        End If
       
    Next
   
End Function

Niels
Avatar billede Slettet bruger
13. maj 2009 - 22:32 #3
Hej nih

Det var en smart måde at kopier og remote afvikle. Det har jo så ikke løst det med relationer - man kunne helt undlade at importere i ovenstående - du har jo fint sørget for at præsentere filen i explorer, klar til at blive åbnet. Importwizarden kan klarer det med relationerne. Måske indeholder Backenden alt muligt andet som ikke skal med - men her kunne man jo lave en automatisk slutoprydning, hvis tabellisten i den oprindelige sletning blev gemt. Lidt ufikst - indrømmet.
Avatar billede nih Novice
13. maj 2009 - 22:45 #4
Hej

har du en ide til hvordan jeg kører Importwizarden i VBA

Niels
Avatar billede Slettet bruger
14. maj 2009 - 20:08 #5
Nej jeg aner ikke om wizarder har noget 'api'.

tror jeg ville en anden vej - relation er objekter ligesom alt andet - faldt over dette hit på 'copy relations':
http://www.vbforums.com/showthread.php?p=720432
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