ODBC

Profil bloqué - 6 mai 2010 à 09:05
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 7 mai 2010 à 14:47
Bonjour,
alors voila, je vous expose tout d'abord mon code :

baseprincipale = Test1

DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;DSN=Test1;" _
& "DATABASE=GestionLigne1&2", acTable, "base", "dbo_base"

DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;DSN=Test1;" _
& "DATABASE=GestionLigne1&2", acTable, "connecte", "dbo_connecte"

DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;DSN=Test1;" _
& "DATABASE=GestionLigne1&2", acTable, "connexion", "dbo_connexion"


Donc ici je fait mes lien ODBC avec mes tables qui sont sur un SQL server.

Private Sub password_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then

Dim sql As String
Dim rs As DAO.Recordset

'on selectionne les attributs des utilisateurs que l'on entre dans ce formulaire de connexion
sql "SELECT * FROM password WHERE nom_user '" & Me.login & "' AND password_user ='" & Me.password & "';"

Set db = OpenDatabase(baseprincipale)
Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
rs.MoveLast

Alors la j'ouvre la baseprincipal qui est défini plus haut, tout marche bien, quand je lance mon appli access, je rentre mon mot de passe et login, quand je click sur connect une fenetre s'ouvre me dememandant de séléctionner le DSN. Fonctionnement normal, mais j'aimerais bien que je n'ai pas a séléctionner le DSN, que ca le fasse tout seul, mais je n'arrive pas à trouver le script qui va bien :S

Merci de votre aide ^^

11 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mai 2010 à 09:20
Salut
Avant tout, il faut éclaircir la situation :
- catégorie VB6
- tu parles de SQL Server
- tu parles de Access
Dans quel logiciel es-tu ?

ODBC pour se connecter à SQL Server : il y a des moyens plus simples : <la bible des connexions>

De quel type sont tes objets DoCmd et db ?
DAO est obsolète et certaines fonctions ne marchent plus (comme les Find)
Utilise plutôt ADO (ADODB)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Profil bloqué
6 mai 2010 à 09:54
Alors, enfaite, j'ai une base de données qui est sur access, elle dispose de formulaire, requêtes, états, modules. Il y a un code en VBA qui tourne derrière pour remplir des champs dans les requêtes. J'ai pour but d'utiliser SQL Server, pour améliorer le système actuelle. J'ai donc utilisé Microsoft SDL Server Management Studio Express pour créer mes tables. Après avoir fait des recherche sur le net, j'ai décidé d'utiliser ODBC, j'ai alors fait le lien comme montré si dessus. Mais le soucie c'est que j'ai la fenetre qui demande de sélectionner le dsn a chaque fois que je veut ouvrir ma base. J'ai 11022 ligne de code VBA à adapter et moins d'un mois maintenant, et j'était fière du résultat jusqu'à ce qu'on me disse de supprimer cette sélection de dsn.... J'utilise VB version 6.3 et j'ai access 2007. Tu parle de type DoCmd et db, comment savoir cela ? Dans le script actuel DAO est utilisé, et utiliser ADO me ferait tout modifier nan? :/
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mai 2010 à 10:48
Ok, donc tu es sous VBA et le code que tu nous à montré est dans Access.
Ai-je bien compris ?

"Tu parle de type DoCmd et db, comment savoir cela ?"
Tu as dû les dimensionner à un moment donné, non ?

Oui, modifier DAO pour ADO te ferait modifier les types de tes objets ainsi que certaines syntaxes. Modifs simples, mais modifs.

Pour ce qui concerne ton problème majeur, ODBC, comme cela ne concerne que la partie connexion à ta base de données, les modifs pour passer de ODBC à un moteur comme Jet4 seraient localisées - j'espère que tu as centralisé la partie connexion-déconnexion à ta DB dans une Sub ou Fonction.
En utilisant "Microsoft OLE DB Provider for SQL Server", la chaîne de connexion pourrait ressembler à ça :
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
                   "User ID=Toto;Initial Catalog=maDB;Data Source=lePC"
où :
User ID : le login à ta base
Initial Catalog : le nom de ta base dans SQL Server
Data Source : le nom du PC qui héberge le SQL Server

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Profil bloqué
6 mai 2010 à 10:57
heu alors voila tout mon code, j'espère que ca va te servir :/
Option Compare Database
Private Sub Form_Load()

'ouverture du formulaire d'accueil
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "accueil"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
      
    'faire une petite pause pour que le formulaire accueil s'affiche
    lTime = 0
    Do
    DoEvents
    lTime = lTime + 1
    Loop Until lTime >= 1000

    'suppression des tables liées
    Dim BD As DAO.Database
    Set BD = CurrentDb
    Dim tb As DAO.TableDef
    For Each tb In BD.TableDefs
        If Left(tb.Name, 4) <> "MSys" Then 
'on ne supprime pas les tables systèmes
            If Len(tb.Connect) > 0 Then
                DoCmd.RunSQL "DROP TABLE [" & tb.Name & "] ;" 'on détruit les tables
                'Debug.Print "effacement de " & tb.Name & " -=#=> " & tb.Connect
            End If
        End If
    Next tb

'déclaration des élements servant à la connexion et deconnexion de lecteurs réseaux
    'Dim NetR As NETRESOURCE
    'Dim ErrInfo As Long
    'Dim MyPass As String, MyUser As String
       
    'création du lecteur réseau pour accéder à la base de données

    'NetR.dwScope = RESOURCE_GLOBALNET
    'NetR.dwType = RESOURCETYPE_DISK
    'NetR.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
    'NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
    'NetR.lpLocalName = ""
    'NetR.lpRemoteName = DossierServeur

    'on ne rajoute pas de mot de passe à cette connexion car la connexion vers le serveur ne demande pas de mot de passe
    'MyPass = ""
    'MyUser = ""

    'ErrInfo = WNetAddConnection2(NetR, MyPass, MyUser, _
    'CONNECT_UPDATE_PROFILE)
    'If (ErrInfo NO_ERROR Or ErrInfo 85) Then 'l'erreur 85 survient lorsque le lecteur existe déjà
        'MsgBox "Net Connection Successful!", vbInformation, _
            '"Share Connected"
    'Else
        'MsgBox "ERROR: " & ErrInfo & " - Net Connection Failed!", _
            'vbExclamation, "Share not Connected"
    'MsgBox ("Aucune connection à la base de données du serveur,adresse IP  vérifier si vous êtes connecté au réseau de l'usine ou si le serveur existe!")
    'Application.Quit
    'End If

    'on attribut dès la connexion le chemin de la base principale
    'baseprincipale = "q:\base_princip.mdb"
    baseprincipale = "Test1"
    basetracabilite = DossierServeur + base_traca

    'recherche et création de liaison des tables

' faire le lien entre les 2 bases, on lie toutes les tables
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "base", "dbo_base"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "connecte", "dbo_connecte"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "connexion", "dbo_connexion"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "creation", "dbo_creation"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Flavor", "dbo_flavor"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Formula_Groups", "dbo_formula_groups"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Formulas", "dbo_formulas"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Formulation_Control", "dbo_formulation_control"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "groupe", "dbo_groupe"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Ingredients", "dbo_ingredients"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "malaxeur", "dbo_malaxeur"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "modification", "dbo_modification"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "password", "dbo_password"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "Product_Types", "dbo_product_types"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "securite", "dbo_securite"
    
        DoCmd.TransferDatabase acLink, "ODBC Database", _
    "ODBC;DSN=Test1;" _
    & "DATABASE=GestionLigne1&2", acTable, "suppression", "dbo_suppression"
       
'fermeture du formulaire de connexion
    DoCmd.Close acForm, "accueil"
    
    'empechement de fermer le formulaire demarrage avec access
    fermeture_base1 = 0
    
    'ferm = 1

End Sub

Private Sub password_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then
    
    Dim sql   As String
    Dim rs As DAO.Recordset
    
    'on selectionne les attributs des utilisateurs que l'on entre dans ce formulaire de connexion
    sql "SELECT * FROM password WHERE nom_user '" & Me.login & "' AND password_user ='" & Me.password & "';"
    
    Set db = OpenDatabase(baseprincipale)("c'est a ce moment là que le code me demande la sélection que j'aimerais éviter ^^)
    Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
    rs.MoveLast

    If Not rs.EOF Then
        'enlevement de la protection pour ferme
r le formulaire demarrage
        fermeture_base1 = 1
        
        'fermeture du formulaire de connexion
        DoCmd.Close acForm, "demarrage"

        Dim stDocName As String
        Dim stLinkCriteria As String

        'DoCmd.RunCommand acCmdWindowHide
        
        'sauvegarde du nom et du group de l'utilisateur connecté
        login_user = rs("nom_user").Value
        group_user = rs("groupe").Value
        niv_secu = rs("niv_secu").Value
        
        'récupération du nom du pc
        Dim z As String * 20
        Call GetComputerName(z, 20)
        nom_pc = z
        
        'recupération de la date systeme
        Dim MyDate
        Dim Date1 As String
        MyDate = Date
        Date1 = MyDate
            
        'recuperation de l'heure systeme
        Dim MyTime
        Dim Time1 As String
        MyTime = Time
        Time1 = MyTime
        
        'écriture du nom de l'utilisateur connecté dans la table connecte
        Dim rs2 As DAO.Recordset
        Set rs2 = db.OpenRecordset("connecte", dbOpenDynaset, dbSeeChanges)

            rs2.AddNew
            rs2!nom_connecte = login_user
            rs2!nom_pc = nom_pc
            rs2!date_connecte = Date1 & " " & Time1
            rs2.Update
                
        'écriture du nom de l'utilisateur connecté dans la table connexion
        Set rs2 = db.OpenRecordset("connexion", dbOpenDynaset, dbSeeChanges)

            rs2.AddNew
            rs2!nom_user_connexion = login_user
            rs2!nom_pc_connexion = nom_pc
            rs2!date_connexion = Date1 & " " & Time1
            rs2.Update
                
        'ouverture du formulaire du nombre de connectés
        stDocName = "affiche_connecte"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
                      
        'on affiche le nom du connecté
        Form_affiche_connecte.nom = login_user
        
        'si l'utilisateur n'est pas admin on cache toutes les barres de menu et on masque la fenêtre de la base de données
        If (niv_secu = "tout") Then
        Else
            'masquage de la fenêtre base de données
            DoCmd.SelectObject acTable, , True
            DoCmd.RunCommand acCmdWindowHide
    
            'affichage de la fenêtre base de données
            'DoCmd.RunCommand acCmdWindowUnhide


            'on efface les barres de menu qui ne servent à rien
            DoCmd.ShowToolbar "Menu Bar", acToolbarNo
            DoCmd.ShowToolbar "Form View", acToolbarNo
            DoCmd.ShowToolbar "Formatting (Form/Report)", acToolbarNo
            DoCmd.ShowToolbar "Web", acToolbarNo
        
        End If
        
        'ouverture du formulaire principal
        If (niv_secu = "tout") Then
        stDocName = "principal"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        Else
        stDocName = "principal1"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        End If

        'on met 0 dans la variable fermeture_base pour que l'utilisateur ne puisse plus fermer access
        fermeture_base = 0
        fermeture_base1 = 1
    Else
      MsgBox "L'identifiant ou le mot de passe est incorrect ", vbInformation, "Connexion"
    End If
End If
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mai 2010 à 16:48
Alors, programmes-tu sous le VBA de Access ?
C'est quand même une première information qu'il faut éclaircir.
Après, il faudra dire quelle version.
Le temps qu'on perd pour ne pas savoir expliquer dans quel environnement on se trouve ...

Oh le beau code.
Mais cela ne nous avance en rien :
"quand je click sur connect une fenetre s'ouvre me dememandant de séléctionner le DSN"
Je ne vois pas de Sub nommée "Connect"
S'agit-il de password_KeyPress ?

Set db = OpenDatabase(baseprincipale)
Il y a quoi dans baseprincipale ?
Seulement "Test1" et rien d'autre, pas d'extension au fichier, pas de chemin ?
Je ne suis pas très habitué aux méthodes DAO sous Access, mais à mon avis, il manque quelque chose.
--> Voir l'aide et l'exemple de la fonction OpenDatabase
0
Profil bloqué
6 mai 2010 à 17:00
Oui je travail sous le VBA de access et la version est dite plus haut, 6.3!
Mon code fait 11022 ligne, je ne peut donc pas le copier entièrement ici, mais mon soucie se situe dans cette partie. Et oui baseprincipale ne contient que Test1 (nom de mon dsn) j'ai essayé en mettant Test1.dsn ou le chemin mais rien n'y fait.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mai 2010 à 18:19
Access 6.3 n'existe pas

Bah mets le nom de ta base MDB avec le chemin, je pense que ça marche comme ça.
Pourquoi vouloir passer par un ODBC ?
Access doit avoir tout ce qui lui faut pour charger une MDB.
0
Profil bloqué
7 mai 2010 à 08:21
Le VB a comme version 6.3, et je suis dans le VB depuis que 1 mois, je savait même pas que ca existai avant... Dans ma première partie je lie les tables avec "DoCmd.TransferDatabase acLink, "ODBC Database"", ca marche, elle apparaisse dans access, mais quand je fait "Set db = OpenDatabase(baseprincipale)", ca me demande de sélectionner le dsn, j'aimerais éviter ca. Mes tables étant lié ne pourrais-je pas les utiliser sans faire "Set db = OpenDatabase(baseprincipale)" ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mai 2010 à 09:52
Bon, j'abdique.
A part répéter l'énoncé de ton programme, je ne vois rien dans tes réponses :
Je te demande la version de Access : tu me réponds 6.3 alors que j'attends 2000, 2003 ou 2007.
Je t'ai suggéré de regarder dans l'aide comment s'utilise OpenDatabase et d'appliquer les exemples, d'utiliser le NOM DU FICHIER.MDB à la place de ton fichier DSN, mais tu ne sembles pas avoir essayé.
Alors que veux-tu qu'on fasse ?
On n'appuiera pas sur les touches à ta place ...
0
Profil bloqué
7 mai 2010 à 10:29
je cite : "J'utilise VB version 6.3 et j'ai access 2007." ma deuxième réponse ^^ J'ai regardé comment utiliser OpenDatabes, je ne trouve pas de réponse à mon gout, l'affichage de cette fenetre est obligatoire! J'ai refait le teste avec le nom du fichier.MDB et il ne le trouve pas.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mai 2010 à 14:47
Version : Autant pour moi, mes excuses

"nom du fichier.MDB et il ne le trouve pas" : As-tu bien précisé le chemin complet ?
0
Rejoignez-nous