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 :

[DAO][00]Envoyer des valeurs dans une requete SQL direct


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 29
    Points
    29
    Par défaut [DAO][00]Envoyer des valeurs dans une requete SQL direct
    Bonjour.

    Je travaille sous Windows 2000 Server. Access 2000.

    Dans Access, je cherche a modifier un mot de passe pour acceder aux tables par ODBC.
    Pour cela, il faut executer une requete SQL direct.
    Pour y arriver :
    - Nouvelle requete en mode creation
    - je ferme la fenetre m'offrant le choix des tables et requetes a utiliser
    - menu Requete/Specifique SQL/SQL direct.

    J'arrive sur une fenetre blanche ou je dois saisir : Modify user "<numero_utilisateur>" as password = <nouveau_mot_de_passe>.

    Jusque la tout va bien.

    Seulement, j'aimerais pouvoir lancer cette requete a partir d'un formulaire permettant a l'utilisateur lui meme de saisir son nouveau mot de passe dans un champ de ce formulaire. Apres saisie, je voudrais envoyer les valeurs (user et mot de passe) a la requete SQL Direct et donc permettre la modif du mot de passe sans mon intervention ou sans que l'utilisateur aille mettre son nez dans la requete.
    Je sais comment faire pour les requetes classiques mais, la, je bloque.

    Merci pour votre aide.
    Cordialement.
    Jeannot2.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    tu peux peut-être adapater ce bout de code écrit pour ODBC-SQL Serveur.
    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
    Sub ChangerMotDePasse()
    Dim Wksp As DAO.Workspace, Conn As DAO.Connection, strODBCconn As String
    Dim r As DAO.Recordset, qd As DAO.QueryDef, strSQL As String
    Dim strUID As String, strPWD As String, strNwPWD As String
    Dim lngAffRecs As Long
    Dim errX As DAO.Error, strErrMsg As String
     
    strUID = "NomUtilisateur"
    strPWD = "MotDePasseEnCours"
    strNwPWD = "NouveauMotDePasseEnCours"
     
    On Error GoTo ERRH
     
    ' Créer un nouveau workspace de type ODBC
    Set Wksp = DBEngine.CreateWorkspace("Wksp2", "Admin", "", dbUseODBC)
    ' Chaîne de connexion ODBC
    strODBCconn = "ODBC;Driver={SQL Server};Server=LZ2;Database=MOP;" & _
                  "Uid=" & strUID & ";Pwd=" & strPWD
     
    ' Ouverture connexion ODBC
    Set Conn = Wksp.OpenConnection("", dbDriverNoPrompt, , strODBCconn)
     
    ' Instruction SQL : EXEC sp_password MotDePasseEnCours, NouveauMotDePasseEnCours
    strSQL = "EXEC sp_password  '" & strPWD & "', '" & strNwPWD & "'"
    ' Création requête temporaire
    Set qd = Conn.CreateQueryDef("")
    ' Affectation du SQL à la requête
    qd.SQL = strSQL
    ' Exécution requête
    qd.Execute
    ' Requête INSERT/UPDATE/DELETE : Nbre d'enregistrements affectés
    lngAffRecs = Conn.RecordsAffected
     
    QUIT:
    If Not qd Is Nothing Then qd.Close
    If Not Conn Is Nothing Then Conn.Close
    If Not Wksp Is Nothing Then Wksp.Close
    Exit Sub
     
    ERRH:
    strErrMsg = CStr(Err.Number) & ":" & Err.Description & vbCrLf & _
               "-------------------------------------------------------"
    'Récupérations Erreur(s) driver ODBC
    For Each errX In DBEngine.Errors
        strErrMsg = strErrMsg & vbCrLf & Format(errX.Number, "00000") & " : " & errX.Description
    Next
    Err.Clear
     
    'Debug.Print strErrMsg
    MsgBox strErrMsg
    Resume QUIT
     
    End Sub
    strUID, strPWD, strNwPWD pourrait être récupérés sur un formulaire, et le code ci-dessus inséré dans le code d'un bouton.

    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Bonjour.

    merci pour cette reponse.

    Je vais adapter a mes besoins et tester.

    Merci.
    Cdlt.
    Jeannot2

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Bonjour.

    J'ai essaye apres avoir un peu adapte.

    Par contre, j'ai un soucis avec la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC sp_password  '" & strPWD & "', '" & strNwPWD & "'"
    J'ai le message d'erreur suivant :

    ODBC-Call failed
    ......[NCR][ODBC Teradata Driver][Teradata Database] Syntax error, expected something like '(' between the word 'sp_password' and the string 'd' keyword........

    L'ancien mot de passe commence par un d. il faudrait donc saisir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC sp_password  ('" & strPWD & "', '" & strNwPWD & "')"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC sp_password  '(" & strPWD & "', '" & strNwPWD & ")'"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC sp_password  '(" & strPWD & ")', '(" & strNwPWD & ")'"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC sp_password  ('" & strPWD & "'), ('" & strNwPWD & "')"
    Ca tombe en erreur pour d'autres raisons.

    D'autre part, j'ai essaye de saisir ce qui marche bien dans une requete SQL direct c'est a dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "Modify user " & strPWD & " as password =" & strNwPWD & "
    Ca n'a pas fonctionne non plus.

    J'ai enfin essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "EXEC Modify user " & strPWD & " as password =" & strNwPWD & "
    La reponse a ete qu'il manque un mot ou un 'UDFCALLNAME' entre EXEC et Modify

    Savez-vous comment peut on resoudre ?

    Merci.
    Cdlt.
    Jeannot2

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Mon exemple est un exemple SQL-Serveur.
    EXEC est mot clé SQL-Serveur et sp_password une procédure SQL-Serveur.

    Si la syntaxe est : Modify user "<numero_utilisateur>" as password = <nouveau_mot_de_passe>
    alors ce qui semble le plus proche dans ton cas est
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "Modify user """ & strUID & """ as password =" & strNwPWD
    ce qui donne pour strUI="12" et strNwPWD="123456"
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Modify user "12" as password =123456
    Je m'étonne cependant qu'il n'y ai pas de délimiteurs de chaîne de caractères encadrant <nouveau_mot_de_passe>

    A+

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    Bonjour.

    Merci beaucoup pour la reponse.
    Ca fonctionne parfaitement.

    Cordialement.
    Jeannot2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insérer des valeurs dans une table sql via visual studio
    Par le sportif dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/04/2014, 10h17
  2. [MySQL] Perte de la liste des valeurs d'une requete sql
    Par yaya_la_rafale dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/04/2010, 14h30
  3. [AC-2003] Prise de temps important dans une requete SQL directe
    Par Marc_27 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 23/11/2009, 15h38
  4. Traitement des espaces dans une requete SQL
    Par edogawa dans le forum SQL
    Réponses: 4
    Dernier message: 30/10/2007, 13h49

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