01. december 2003 - 11:49Der er
19 kommentarer og 1 løsning
Sammenkæde tabeller vha. VBA
Er det muligt at lave noget VBA som sammenkæder frontend'en med tabellerne fra backend'en? Der er oprettet System-DSN'er som virker, men eftersom jeg skal konfigurere 5 ens frontend's med forskellige DSN'er, ville jeg gerne gøre det med f.eks. en knap på en formular.
Det kan du godt. Kig på DoCmd.TransferDatabase som kan linke dine BE tabeller til din FE.
Jeg tror bare ikke du kan benytte User-/System-/File-DSN, men du skal i stedet skrive din connection-string. Hvis det er op mod en MS-SQL server, kan jeg godt hjælpe med at strukturere en connection-string.
Hmmm...ikke helt det jeg ville. Når man klikker på Filer -> Hent eksterne data -> Sammenkæd tabeller... finder en DSN og sammenkæder tabellerne. Hele den procedure vil jeg gerne have som VBA....hvis det dog bare var muligt at inspille en makro i Access.
Det er lige netop det du kan med DoCmd.TransferDatabase! Den kan importere, eksportere og (det som du skal bruge) sammenkæde. Der findes også en makro af samme navn som du kan benytte, hvis du ikke vil benytte VBA.
Jeg benytter selv denne kode, for at importere nogle MS-SQL-tabeller: DoCmd.TransferDatabase acImport, "ODBC Database", "ODBC;DRIVER=SQL Server;SERVER=ServerNavn;Database=DatabaseNavn;Trusted_Connection=Yes", acTable, "Tabelnavn", "Tabelnavn"
i stedet for acImport,skal du jo så benytte acLink for at sammenkæde.
Det er ikke muligt optage en makro, som registrerer alle dine muse-klik. Den eneste måde du kan linke tabeller gennem kode, er ved brug af DoCmd.TransferDatabase.... Og er den eneste metode!
Så får jeg en run-time error: Run-time error '2507': ODBC database-typen er ikke en installeret databasetype eller understøtter ikke den valgte handling.
?AccessError(2507) i debuggeren giver: "|-typen er ikke en installeret databasetype eller understøtter ikke den valgte handling.@Du brugte metoden TransferDatabase, men et udtryk i argumentet Databasetype evaluerer ikke til en gyldig databasetype til import, eksport eller sammenkædning. Oplysninger om gyldige databasetyper finder du ved at klikke på Hjælp.@@2@604780@1"
Så har jeg en connection string der virker: DoCmd.TransferDatabase acLink, "<SQL Database>", "ODBC;FileDSN=NavnPåFilDSN;DATABASE=NavnPåDatabase", acTable, "Tabel1", "Tabel1"
Så mangler der kun en ting: I stedet for at hardcode ovenstående for HVER tabel i databasen (35!), er det så ikke muligt at "cykle" gennem alle user databaser? (flere point tildeles selvfølgelig...)
Dim db As Database Dim tdef As TableDef Set db = CurrentDb For Each tdef In db.TableDefs Select Case left(tdef.Connect, 5) Case "ODBC;" Debug.Print tdef.Name, "ODBC" DoCmd.DeleteObject acTable, tdef.Name End Select Next tdef
dim conn as ADODB.Connection Dim rs as ADODB.recordset set conn = new ADODB.connection set rs = new ADODB.connection conn.open "Din connectionstring" rs.open "SELECT name FROM sysobjects WHERE type = 'U'", conn while not rs.eof debug.print rs!name rs.movenext wend rs.close conn.close set rs = nothing set conn = nothing
Det ser ud til at være lige det jeg skulle bruge, jobba, tak.
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.