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

Requêtes et SQL. Discussion :

Probleme de code dans recordset


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut Probleme de code dans recordset
    bonsoir à tous,

    sur mon appli j'ai placé un code afin de filtrer les postes pouvant accéder à la base de données.
    J'ai une dizaine de postes sensés pouvoir accéder, sur 7 d'entre eux le code fonctionne très bien mais malheureusement sur 3 autres ça "coince" et je n'arrive pas à trouver pourquoi.
    J'ai vérifié les références vba elles sont identiques. J'ai épuré le code au maximum afin de limiter les sources d'erreurs.
    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
     
    Dim oDb As DAO.Database
    Dim rst As DAO.Recordset
    Dim Sql As String
     
    Set oDb = CurrentDb
    MsgBox "1"
    Sql = "SELECT * FROM Machines WHERE Machine = Environ(""computername"") "
    MsgBox "2"
    Set rst = oDb.OpenRecordset(Sql, dbOpenSnapshot)
    MsgBox "3"
    If rst.EOF Then
    MsgBox "4"
    MsgBox "VOTRE MACHINE " & Environ("computername") & Chr(13) & Chr(13) & "N'EST PAS AUTORISEE A ACCEDER A CETTE APPLICATION", , "AVERTISSEMENT"
    Sql = "INSERT INTO JournalIntrusions ( DateHeure, Machine) SELECT Now() AS Expr1, Environ(""computername"") AS  Expr2;"
    DoCmd.RunSQL Sql
    MsgBox "5"
    Else
    Sql = "INSERT INTO JournalAcces ( DateHeure, Machine) SELECT Now() AS Expr1, Environ(""computername"") AS  Expr2;"
    DoCmd.RunSQL Sql
    MsgBox "6"
    J'ai placé des msgbox pour voir jusqu'ou ça fonctionne et ça plante à la 2eme msgbox.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je ne comprends pas ta chaine SQL, elle ne devrait pas marcher du tout.*

    J'écrirais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql = "SELECT * FROM Machines WHERE Machine ='" & Environ("computername") & "'"
    De même pour la suite.

    De plus, je ne vois pas l'utilité d'un recordset dans ton cas, mais une fonction de domaine (DLookup) serait plus appropriée ici pour une seule valeur (pour les fonctions de domaines il y a un tuto, voir mes tutos).

    De plus pense à indenter ton texte.

    Philippe
    Dernière modification par Invité ; 18/11/2011 à 20h20.

  3. #3
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut
    bonsoir Philippe

    effectivement au depart la requete est ecrite de façon académique comme tu l'as écrite, néanmoins le problème était identique, disons que j'ai voulu tester....

    De même pour le recordset, javais un code sous le coude, je l'ai adapté pour le fun, pour comprendre comment ça marchait, je fonctionne comme ça....

    Alors puisque tu en parles, je vais tester avec un DLookup auquel je n'avais pas pensé.

    Il n'en reste pas moins que j'aimerais bien comprendre

  4. #4
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut
    re....

    bon ben voilà, je gère ça avec un Dlookup comme tu le suggérais et ça marche. (à tester au bureau sur les postes posant problème)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim OrdiLocal As String
     
    OrdiLocal = Nz(DLookup("Machine", "Machines", "Machine = Environ(""computername"") "), 0)
     
    If OrdiLocal <> Environ("computername") Then
    MsgBox "VOTRE MACHINE " & Environ("computername") & Chr(13) & Chr(13) & "N'EST PAS AUTORISEE A ACCEDER A CETTE APPLICATION", , "AVERTISSEMENT"
    Sql = "INSERT INTO JournalIntrusions ( DateHeure, Machine) SELECT Now() AS Expr1, Environ(""computername"") AS  Expr2;"
    DoCmd.RunSQL Sql
    Else
    Sql = "INSERT INTO JournalAcces ( DateHeure, Machine) SELECT Now() AS Expr1, Environ(""computername"") AS  Expr2;"
    DoCmd.RunSQL Sql
    End If
    Mais comme je le disais précédemment, j'aimerais bien savoir d'où ça vient ce dysfonctionnement partiel, si tu as une idée elle sera la bienvenue.

  5. #5
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut Environ("computer") qui pose probleme
    je crois que j'ai cerné le problème, en fait les 3 ou 4 PC concernés buttent sur la variable d'environnement (je crois que c'est comme ça que ça s'appelle )

    Environ("computer")

    Ils ne veulent absolument pas la reconnaitre que ce soit par exemple pour donner la valeur à une variable , style : OrdiLocal = Environ("computer")
    Ou que ce soit au sein d'une requete en tant que critere avec cette synthaxe Environ(""computer"").

    Quelqu'un saurait-il me dire ce que je dois modifier ou ajouter sur les postes concernés pour franchir cet écueil ?

  6. #6
    Rédacteur/Modérateur


    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 743
    Billets dans le blog
    67
    Par défaut
    Salut,

    Tu as testé sur ces 3 postes, dans la fenêtre d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? Environ("computername")
    Et verifié ce qu'elle te renvoie et si ça correspond au nom de machine sauvegardé dans ta table ?

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut
    je vais retester ça tout à l'heure mais de memoire ça me donne une msgbox vide

  8. #8
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Effectivement, il semble que cette fonction ne retourne pas toujours le résultat attendu.

    Il y a quelques anciennes discussions à ce sujet sur le forum.

    Je ne crois pas que la cause n'ait jamais été véritablement établie.

    Il existe une autre méthode avec l'API GetComputerName (voir la FAQ ou le forum).

    Domi2

  9. #9
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut
    bilan de l'essai :

    Environ("Computer") me retourne bien le nom du poste dans une msgbox à l'ouverture d'un form
    par contre sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OrdiLocal = nz(Dlookup("Machine", "Machines", "Machine = Environ(""computername"") "), 0)
    j'ai un message d'erreur execution 3085, fonction "environ non definie dans l'expression

    idem sur la ligne sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "INSERT INTO JournalAcces ( DateHeure, Machine) SELECT Now() AS Expr1, Environ(""computername"")
    J'ai pallié ce probleme en attribuant la valeur à un champ non visible sur le formulaire et en remplaçant Environ(""computername"") par forms! accueil!OrdiLocal

    Je vais tester le "GetComputerName"

  10. #10
    Membre éclairé Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Par défaut
    C'est ok pour moi avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Compare Database
    Option Explicit
    ' déclaration des différentes API Windows
    Public Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpbuffer As String, nSize As Long) As Long
     
    Public Function GetName() As String
       Dim Buffer$, gclen&, a&
       'Détermine le nom de l'opérateur
       Buffer$ = Space(255)
       gclen& = Len(Buffer$)
       a& = GetComputerName(Buffer$, gclen&)
       GetName = Left$(Buffer$, gclen&)
    End Function
    je remplace Environ("ComputerName") par GetName() dans le DLookup et la sql, ça fonctionne sans probleme.

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

Discussions similaires

  1. Probleme de code dans NotPad
    Par JCMANSION dans le forum Android
    Réponses: 16
    Dernier message: 01/12/2010, 11h30
  2. probleme selection max dans recordset
    Par marcuscircus dans le forum VBA Access
    Réponses: 8
    Dernier message: 04/08/2008, 17h10
  3. Probleme bouton flash dans un code javascript
    Par caroen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/11/2006, 12h46
  4. [PHP-JS] Probleme de javascript dans un code php
    Par stomerfull dans le forum Langage
    Réponses: 3
    Dernier message: 23/01/2006, 09h33
  5. [PHP-JS] Probleme de javascript dans un code php
    Par stomerfull dans le forum Langage
    Réponses: 20
    Dernier message: 12/01/2006, 13h41

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