Avatar billede avalon116 Nybegynder
24. juni 2005 - 13:37 Der er 11 kommentarer og
1 løsning

importere fra database

jeg vil gerne importere nogle tabeller fra en anden database. Alle tabellerne (der har samme struktur) skal importeres til den samme tabel.
Tabellernes navne (i den database der importeres fra) er årstal og i min database (som der skal importeres til) er der en anden tabel med kun ét felt. I dette felt er der er række poster (typisk 4) med fortløbende årstal (fx 1999, 2000, 2002, 2002).

Jeg vil importere de tabeller, der har samme navne som i tabellen med årstal.

Jeg vil bruge "DoCmd.TransferDatabase" men er usikker på hvordan jeg får den til at hente værdierne fra tabellen med årstal og så bruge dem?

Det må være noget med at tælle antallet af poster og så loope?
Avatar billede hvideg Nybegynder
27. juni 2005 - 00:20 #1
Jeg er ikke helt sikker på om spørgsmålet specifikt drejer sig om docmd.transferdatabase specifikt. men hvis ikke. Hvis du går til tables skærmbilledet, højreklikker og vælger import, vil du få en dialog til at importere og foretage evt feltmapninger igennem.

Personligt ville jeg nok linke (også ved højreklik) til den gamle db. Siden lave en query ovenpå de linkede tabeller som en enten insert eller create table type.
Avatar billede terry Ekspert
27. juni 2005 - 08:28 #2
so the table you are importing to has the same layout AND name as the one you are importing from?
Avatar billede avalon116 Nybegynder
27. juni 2005 - 09:24 #3
terry> samme layout men ikke samme navn. Tabellen jeg importerer til hedder "tIndivid" og de tabeller jeg inporterer fra hedder forskelllige årstal fx "1999". Den tabel der indeholder navnene på de tabeller jeg importerer fra hedder tStartår og rummer altså et antal poster med årstal, fx:

1999
2000
2001
Avatar billede terry Ekspert
27. juni 2005 - 11:31 #4
you can maybe use this

Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset

        rs.Open "Select * From SomeTableWithYearsIn", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        On Error Resume Next
       
        DoCmd.SetWarnings False
        Do Until rs.EOF
       
            DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\test.mdb", acTable, rs(0), rs(0)
           
           
            DoCmd.RunSQL "INSERT INTO tIndivid SELECT * from " & rs(0)
           
            DoCmd.RunSQL "DROP table " & rs(0)
            rs.MoveNext
        Loop
       
        DoCmd.SetWarnings True
       
rs.Close
Avatar billede avalon116 Nybegynder
27. juni 2005 - 11:38 #5
vedr:

            DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\test.mdb", acTable, rs(0), rs(0)
           
            DoCmd.RunSQL "INSERT INTO tIndivid SELECT * from " & rs(0)

er man nødt til at importere til en midlertidig tabel, når man bruger "DoCmd.TransferDatabase"? Eller kan man importere direkte til tIndivid?
Avatar billede avalon116 Nybegynder
27. juni 2005 - 11:41 #6
jeg spørger fordi jeg har løst det sådan her:

******************************

Private Sub cmd1_Click()
Dim StartAar As Integer
Dim AntalAar As Integer
Dim Count
Dim Individdata As String
Dim strFilter As String
Dim Aar As String
Dim Database As String

'slet indholdet at tabellen tStartår og indsæt nye år
DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * from tStartår"
    StartAar = InputBox("Indtast nyeste statusår." & Chr(13) & "Status pr 31.12:", "Statusår", Year(Now) - 1)
    AntalAar = InputBox("Hvor mange års data skal anvendes?", "Antal år", 4)
    Count = AntalAar
        Do Until AntalAar = 0
            DoCmd.RunSQL "INSERT into tStartår([Id],[Startår]) VALUES (" & AntalAar & "," & StartAar - AntalAar + 1 & ")"
        AntalAar = AntalAar - 1
        Loop
       
'Slet indhold af tIndivid
    DoCmd.RunSQL "DELETE * from tIndivid"

'Åbner filbrowser så man kan vælge den database, der indeholder dataene
    strFilter = ahtAddFilterItem(strFilter, "Datafiler (*.mdb)", "*.MDB")
    Database = ahtCommonFileOpenSave( _
        Filter:=strFilter, OpenFile:=True, _
        DialogTitle:="Vælg database, der indeholder Individdata...", _
        Flags:=ahtOFN_HIDEREADONLY)
       
'Importerer data fra databasen
   
    Do Until Count = 0
    Aar = DLookup("[Startår]", "tStartår", "[Id]=" & Count)
    DoCmd.TransferDatabase acImport, "Microsoft Access", Database, acTable, Aar, "tIndivid"
    Count = Count - 1
    Loop
   
DoCmd.SetWarnings True

End Sub
******************************
Avatar billede avalon116 Nybegynder
27. juni 2005 - 11:42 #7
og det virker - bortset fra, at den ikke sætter de importerede data ind i tIndivid, men istedet opretter nye tabeller
Avatar billede avalon116 Nybegynder
27. juni 2005 - 11:47 #8
terry> vil du råde mig til at gå videre med min egen løsning eller prøve dit forslag af?
Avatar billede terry Ekspert
27. juni 2005 - 11:57 #9
DoCmd.TransferDatabase acLink

acLink links the table and it will get the same name as the original (2000)

then
DoCmd.RunSQL "DROP table " & rs(0)

removes the link. So you dont acually see that the table gets linked.

If you put your code between these two lines it should work
Avatar billede terry Ekspert
27. juni 2005 - 11:58 #10
27/06-2005 11:47:58
I cant say becuase I dont know your requirement
Avatar billede avalon116 Nybegynder
27. juni 2005 - 12:01 #11
ok, men tak for hjælpen, du fik mig  i hvert fald videre ad rette spor
Avatar billede terry Ekspert
27. juni 2005 - 12:21 #12
selv tak
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