28. november 2003 - 09:04Der er
11 kommentarer og 1 løsning
Navne på tabeller fra SQL Server
Når jeg i en Access frontend forsøger at sammenkæde med tabeller fra en SQL Server backend, kommer tabellerne til at hedde noget med dbo. først. Det er LIDT irriterende når man nu har 35 tabeller og det forventes at de IKKE hedder dbo. først! :( Er der en måde at hente dem ind kun ved deres "rigtige" navn, sådan som de ser ud i SQL Server Enterprise Manager?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Eller måske kan man lave en makro der fjerner dbo. foran tabellerne? (ja, den hedder vel dbo. fordi det er database owner kontoen der har importeret tabellerne?)
Du kan køre denne funktion efter sammenkædningen. Funktionen kræver reference til DAO:
Public Function ChangeTableNames() On Error Resume Next Dim db As Database Dim tmptable As TableDef, n As Integer Set db = CurrentDb For n = 0 To db.TableDefs.Count - 1 '<<----Hvis tabellen er tilknyttet---->> If db.TableDefs(n).Connect <> "" Then Set tmptable = db.TableDefs(n) If tmptable.Connect <> "" Then If LCase(Left(tmptable.Name, 4)) = "dbo_" Then tmptable.Name = Right(tmptable.Name, Len(tmptable.Name) - 4) End If End If End If Next n Beep End Function
Kiggede lige på den igen og syntes at den var lidt primitivt opbygget. Så her får du en lidt 'smartere' metode:
Public Function ChangeTableNames() On Error Resume Next Dim db As Database Dim tdef As TableDef Set db = CurrentDb For Each tdef In db.TableDefs '<<----Hvis tabellen er tilknyttet---->> If tdef.Connect <> "" Then If tdef.Connect <> "" Then If LCase(Left(tdef.Name, 4)) = "dbo_" Then tdef.Name = Right(tdef.Name, Len(tdef.Name) - 4) End If End If End If Next tdef Beep End Function
Public Function ChangeTableNames() On Error Resume Next Dim db As Database Dim tdef As TableDef Set db = CurrentDb For Each tdef In db.TableDefs '<<----Hvis tabellen er tilknyttet---->> If tdef.Connect <> "" Then If LCase(Left(tdef.Name, 4)) = "dbo_" Then tdef.Name = Right(tdef.Name, Len(tdef.Name) - 4) End If End If Next tdef Beep End Function
.ADP er en HELT helt anden måde at arbejde på end traditionelle .mdb-filer. Du kan således ikke umiddelbart konvertere fra .mdb til .adp uden at en masse funktionalitet vil gå tabt. I stedet for handlingsforespørgsler skal du lave Stored Procedures, i stedet for alm. forespørgsler skal du lave Views, hvor man ikke længere kan lave referencer til formularer, VBA-funktioner, egenskaber m.m.
Til gengæld er det hurtigere og du kan rette direkte i tabellerne fra Access.
Det er jeg helt med på. Der er også en masse begrænsninger der forsvinder ved at skifte til .ADP og de detaljer du beskriver er det normalt ikke et problem. Dog er det en stor mundfuld at gå igang med hvad angår stored procedures :-)
Men hvis man connecter til tabellerne med andet end sa kontoen, så har man dbo problematikken også her.
Det var også rent tilfældigt at jeg fandt frem til det, men da det jo ikke altid er smart at bruge sa kontoen, så ville jeg da være glad hvis der fandtes en anden løsning end at rename tabellerne lokalt.
Du kunne også bare arbejde med dbo-navnene i stedet....så skal du kun lave ændringen én gang...
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.