Avatar billede puppetmaster Nybegynder
28. november 2003 - 09:04 Der 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?
Avatar billede puppetmaster Nybegynder
28. november 2003 - 09:14 #1
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?)
28. november 2003 - 09:43 #2
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

/Thomas
28. november 2003 - 09:45 #3
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
28. november 2003 - 09:47 #4
og igen (sorry):

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
Avatar billede puppetmaster Nybegynder
28. november 2003 - 10:12 #5
Kanon! :)
Avatar billede puppetmaster Nybegynder
28. november 2003 - 10:12 #6
you the man!
Avatar billede hugopedersen Nybegynder
28. november 2003 - 10:12 #7
Jeg kan se at hvis jeg er så fræk at lave en .ADP fil og så bruge sa kontoen når jeg laver connection, så kommer de ikke til at hedde dbo

Er der en fornuftig forklaring på dette ?
28. november 2003 - 10:17 #8
.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.
Avatar billede hugopedersen Nybegynder
28. november 2003 - 10:22 #9
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.
28. november 2003 - 10:27 #10
ok, det sidste var jeg faktisk ikke klar over !! :)
Avatar billede hugopedersen Nybegynder
28. november 2003 - 10:48 #11
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.
28. november 2003 - 11:19 #12
Du kunne også bare arbejde med dbo-navnene i stedet....så skal du kun lave ændringen én gang...
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