Avatar billede puppetmaster Nybegynder
01. december 2003 - 11:49 Der 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.
Avatar billede puppetmaster Nybegynder
01. december 2003 - 11:52 #1
SQL Server tillader ikke File-DSN, vel?
Avatar billede puppetmaster Nybegynder
01. december 2003 - 12:01 #2
JO, det gjorde den.
Avatar billede jobba Nybegynder
01. december 2003 - 13:29 #3
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.
Avatar billede puppetmaster Nybegynder
02. december 2003 - 13:19 #4
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.
Avatar billede jobba Nybegynder
02. december 2003 - 13:26 #5
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.
Avatar billede jobba Nybegynder
02. december 2003 - 13:29 #6
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!
Avatar billede puppetmaster Nybegynder
02. december 2003 - 13:52 #7
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.
Avatar billede puppetmaster Nybegynder
02. december 2003 - 13:59 #8
?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"
Avatar billede jobba Nybegynder
02. december 2003 - 14:03 #9
Du skriver vel bare "ODBC Database" under database type??
Hvis du gør, må du vel skrive din Connection-string forkert.
Avatar billede puppetmaster Nybegynder
02. december 2003 - 14:07 #10
DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DRIVER=SQL Server;SERVER=Server1;Database=Database1;", acTable, "Tabel1", "Tabel1"
Avatar billede puppetmaster Nybegynder
02. december 2003 - 14:08 #11
Syntaksen for TransferDatabase skulle være:

expression.TransferDatabase(TransferType, DatabaseType, DatabaseName, ObjectType, Source, Destination, StructureOnly, StoreLogin)
Avatar billede jobba Nybegynder
02. december 2003 - 14:19 #12
Det virker meget mærkeligt.
Prøv at referere til en DSN i stedet for at skrive hele connectionstring.
fx: "ODBC;DSN=DataSource1;"
Avatar billede puppetmaster Nybegynder
02. december 2003 - 14:27 #13
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...)
Avatar billede jobba Nybegynder
02. december 2003 - 14:34 #14
Til det syntes jeg du skal kigge på dette spørgsmål, som jeg selv oprettede engang:
http://www.eksperten.dk/spm/433165

Spørgsmålet gik dog på at cycle alle tabeller igennem som er sammenkædet, men mon du ikke kan bruge det til noget?
Avatar billede jobba Nybegynder
02. december 2003 - 14:36 #15
Fx. kan du se i spørgsmålet at denne kode kan bruges, så ved jeg bare ikke om den også medtager system-tabeller:

Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
For Each obj In dbs.AllTables
    'Gør noget her!
Next obj
Avatar billede puppetmaster Nybegynder
02. december 2003 - 14:54 #16
Så har jeg da noget kode der kan delete linked tables, mangler bare noget der kan "cykle" gennem en DSN og oprette links fra databasen.
Avatar billede puppetmaster Nybegynder
02. december 2003 - 14:55 #17
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
Avatar billede jobba Nybegynder
02. december 2003 - 15:00 #18
Hvad tænker du på, når du siger: "cykle" gennem en DSN ? Vil du cycle igennem alle tabellerne på din SQL, og linke dem til Access?
Avatar billede jobba Nybegynder
02. december 2003 - 15:22 #19
Returnerer alle user tabeller fra Databasen:

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
Avatar billede puppetmaster Nybegynder
15. december 2003 - 23:57 #20
Det ser ud til at være lige det jeg skulle bruge, jobba, 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