IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Connexion ODBC à SQL SERVER Express 2005


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Connexion ODBC à SQL SERVER Express 2005
    application access dans un domaine avec Active Directory (connexion Authentification Windows) mon application (Access 2007 avec table attachées) arrive à attaquer ma base SQL Server sans problème et les liaisons des tables sont rafraichies sans soucis.

    Quand je passe sur un workgroup (sans active directory donc) avec des ordis en Windows XP Pro, je n'arrive pas à raffraichir les liaisons quand bien meme que j'aie déclaré une connexion Sql Server (utilisateur et mdp) en utilisant une authentification SQL Server.

    J'ai essayé plusieurs solutions en parcourant les différents forums mais je suis perdu.

    Quelqu'un a til une solution à me proposer ?

    Merci par Avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 335
    Points
    34 335
    Par défaut
    bonjour déjà ,
    si tu nous donnais le code dernièrement utilisé qui ne fonctionne pas stp ?
    le motif de non fonctionnement ? Erreur soulevée ?
    les connexions ODBC par DSN :
    http://access.developpez.com/sources...s#ConfigDsnVBA

    dis nous en un peu plus
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Connexion ODBC à SQL SERVER Express 2005
    Bonjour et merci de t'interesser à mon problème.
    Comme tu me l'as demandé je t'envoie les lignes de code que j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
        If Tok = 1 Then
            '----- Table déjà attachée
            Select Case DBSYS(TABBASE(I))
                Case 1
                    'Base Access
                    NEWCONNECT = ";DATABASE=" & DBNOM(TABBASE(I))
                Case 2
                    'Base Base SQL Serveur Avec Active Directory
     
                     NEWCONNECT = "ODBC;DRIVER=" & DBDRV(TABBASE(I)) & ";SERVER=" & DBSRV(TABBASE(I)) & ";Trusted_Connection=Yes;DATABASE=" & DBNOM(TABBASE(I)) & ";"
     
                    'Base Base SQL Serveur Sur workgroup avec connection SQL Server
                Case 3
                     NEWCONNECT = "ODBC;DATABASE=" & DBNOM(TABBASE(I)) & ";UID=USERCON;PWd=userconnect;DSN=USERCON"
     
            End Select
     
            '----- Rafraichissement Connexion
            If dbc.TableDefs(TABNAME).Connect <> NEWCONNECT Then
                On Error Resume Next
                dbc.TableDefs(TABNAME).Connect = NEWCONNECT
                dbc.TableDefs(TABNAME).SourceTableName = TABNAME
                dbc.TableDefs(TABNAME).RefreshLink
            End If
        Else
            '----- Nouvelle Table attachée
            Set TblDef = dbc.CreateTableDef(TABNAME)
            Select Case DBSYS(TABBASE(J))
                Case 1
                    'Base Access
                    NEWCONNECT = ";DATABASE=" & DBNOM(TABBASE(J))
                Case 2
                    'Base Base SQL Serveur Avec Active Directory
     
                    NEWCONNECT = "ODBC;DRIVER=" & DBDRV(TABBASE(J)) & ";SERVER=" & DBSRV(TABBASE(J)) & ";Trusted_Connection=Yes;DATABASE=" & DBNOM(TABBASE(J)) & ";"
     
     
                    'Base Base SQL Serveur Sur workgroup avec connection SQL Server
                Case 3
                    NEWCONNECT = "ODBC;DATABASE=" & DBNOM(TABBASE(I)) & ";UID=USERCON;PWd=;DSN=USERCON"
            End Select
            TblDef.Connect = NEWCONNECT
            TblDef.SourceTableName = TABNAME
            dbc.TableDefs.Append TblDef
        End If
    Je t'explique un peu si tu veux bien.

    J'ai une table qui contient le nom des tables attachées.
    Ma routine se lance au demarrage de mon aplication avec trois cas.

    1) Si la table attachée est dans une base access alors cas N°1

    2) Si elle est dans une base SQl server et que je me trouve sur un reseau avec Active direcory alors cas N°

    3) Si elle est dans un base Sql Server et que je me trouve sur un Workgroup alors Case n° 3

    Si elle n'est pas encore attachée alors création puis attache en fonction de la base.

    Il faut savoir que je debute en SQL et que je me melange les pinceaux au niveau ODBC.

    Quand je lance ODBCAD32 je ne sais pas s'il faut créer le DNS dans

    - Sources de données utilisateur
    Ou
    - Sources de données système
    Ou
    - Sources de données fichier

    Ma DNS "USERCON" a été créer dans source de données utlisateur.
    Dans la base SQL Server stockée sur SQLSVR\Express contient une connexion SQL Server "USERCON" avec comme mdp "userconnect" mappée sur ma base de données.

    Quand je fais le test de connexion dans ODBCAD32 il me dit que le test a reussi. Par contre quand le programme est sur le cas N° 3 ou que je veux ouvrir une table qui est attachée dans ma base il me dit
    ODBC --- Echec de la connexion à "USERCON" alors que ma connexion a des droits accordée par sa en et appartient au schema dbo.

    En resumé JE SUIS PERDU.....

    Merci par avance.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 335
    Points
    34 335
    Par défaut
    essaie d'utiliser ces codes ci :
    tu auras besoin de passer en parametre :
    - path de la base
    - intitulé de la table à modifier
    - chaine de connexion
    - intitulé de la table source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    Function MajLienODBC(PathBaseAModifier As String, TitreTableAModifier As String, connect As String, TitreTableSource As String) As Boolean
    Dim db As DAO.Database
    Dim tbl As DAO.TableDef
    Dim temp As Boolean
    Dim tables As DAO.TableDef
    Dim relation As DAO.relation
    Dim rel As DAO.relation
    Dim chp As DAO.Field
    Dim a As DAO.Property
     
     
        MajLienODBC = False
        temp = False
        Debug.Print PathBaseAModifier
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(PathBaseAModifier)
        For Each tables In db.TableDefs
            If tables.Name = TitreTableAModifier Then
                temp = True
                Exit For
            End If
        Next
     
        ' Création d'un nouvel objet TableDef.
        Set tbl = db.CreateTableDef(TitreTableAModifier & "_piou", dbAttachSavePWD)
        ' Définition des propriétés pour créer le lien
      Debug.Print tbl.Name & ":" & connect
        tbl.connect = "ODBC;" & connect
       ' tbl.RefreshLink
        tbl.SourceTableName = TitreTableSource
        'Ajout de la nouvelle table
        db.TableDefs.Append tbl
        db.TableDefs.Refresh
     
        If temp Then
            'Création des relations identiques à l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Then
                    Set rel = db.CreateRelation(tbl.Name & relation.ForeignTable, tbl.Name, relation.ForeignTable)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    db.Relations.Append rel
                    db.Relations.Refresh
                End If
                If relation.ForeignTable = TitreTableAModifier Then
                    Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    'Debug.Print rel.Name
                    db.Relations.Append rel
                End If
            Next
            'Suppression des relations de l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Or relation.ForeignTable = TitreTableAModifier Then
                    db.Relations.Delete relation.Name
                End If
            Next
            'Suppression de l'ancienne table
            db.TableDefs.Delete TitreTableAModifier
            'Renommage de la nouvelle table
            db.TableDefs(TitreTableAModifier & "_piou").Name = TitreTableAModifier
            db.TableDefs(TitreTableAModifier).connect = "ODBC;" & connect
            db.TableDefs(TitreTableAModifier).RefreshLink
            Debug.Print db.TableDefs(TitreTableAModifier).connect
            MajLienODBC = True
        End If
     
        db.Close
        Exit Function
    fin:
     
    End Function
     
    Function MajTableliee(PathBaseAModifier As String, TitreTableAModifier As String, pathlien As String, TitreTableSource As String) As Boolean
    Dim db As DAO.Database
    Dim tbl As DAO.TableDef
    Dim temp As Boolean
    Dim tables As DAO.TableDef
    Dim relation As DAO.relation
    Dim rel As DAO.relation
    Dim chp As DAO.Field
    Dim a As DAO.Property
        If pathlien <> "a_faire" Then
        MajTableliee = False
        temp = False
        ' Ouverture de la base de données
        Set db = DBEngine.OpenDatabase(PathBaseAModifier)
        For Each tables In db.TableDefs
            If tables.Name = TitreTableAModifier Then
                temp = True
                Exit For
            End If
        Next
     
        ' Création d'un nouvel objet TableDef.
        Set tbl = db.CreateTableDef(TitreTableAModifier & "_piou")
        ' Définition des propriétés pour créer le lien
        tbl.connect = "MS ACCESS;DATABASE=" & pathlien
        tbl.SourceTableName = TitreTableSource
        'Ajout de la nouvelle table
        Debug.Print PathBaseAModifier
        Debug.Print pathlien
        db.TableDefs.Append tbl
        db.TableDefs.Refresh
        If temp Then
            'Création des relations identiques à l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Then
                    Set rel = db.CreateRelation(tbl.Name & relation.ForeignTable, tbl.Name, relation.ForeignTable)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    db.Relations.Append rel
                    db.Relations.Refresh
                End If
                If relation.ForeignTable = TitreTableAModifier Then
                    Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
                    rel.Attributes = relation.Attributes
                    Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
                    chp.ForeignName = relation.Fields(0).ForeignName
                    rel.Fields.Append chp
                    'Debug.Print rel.Name
                    db.Relations.Append rel
                End If
            Next
            'Suppression des relations de l'ancienne table
            For Each relation In db.Relations
                If relation.table = TitreTableAModifier Or relation.ForeignTable = TitreTableAModifier Then
                    db.Relations.Delete relation.Name
                End If
            Next
            'Suppression de l'ancienne table
            db.TableDefs.Delete TitreTableAModifier
            'Renommage de la nouvelle table
            db.TableDefs(TitreTableAModifier & "_piou").Name = TitreTableAModifier
     
     
            MajTableliee = True
        End If
        db.Close
        Exit Function
    Else
        MajTableliee = True
    End If
     
    End Function
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Connexion ODBC à SQL SERVER Express 2005
    Merci pour tes codes. Mais je voudrais juste une petite precision. La base ou ce trouve mes tables est une base SQL Server donc un fichier MDF et non un mdb.
    J'ai lancé la fonction MajLienODBC mais il se plante.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 335
    Points
    34 335
    Par défaut
    le path du fichier n'est pas celui de la base à laquelle tu veux te connecter, mais celle dans laquelle tu veux lier les bases par ODBC...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. Connexion avec SQL Server Express 2005
    Par farouk1301 dans le forum JDBC
    Réponses: 17
    Dernier message: 21/11/2011, 20h51
  2. [SQL Server express 2005] Gros soucis de connexion
    Par wd_newbie dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/03/2009, 10h33
  3. Connexion à Sql Server Express 2005 en C++
    Par guigouz dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/04/2008, 01h50
  4. Réponses: 4
    Dernier message: 06/03/2008, 13h08
  5. Créer connexion ODBC sql server 2005
    Par noname_971 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/12/2007, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo