Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 19h47   #1
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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 :
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.
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 20h01   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 623
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 623
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

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

J'écrirais plutôt :

Code :
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 21h24   #3
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 21h49   #4
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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 :
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.
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 11h41   #5
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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 ?
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h26   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

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

Code :
? Environ("computername")
Et verifié ce qu'elle te renvoie et si ça correspond au nom de machine sauvegardé dans ta table ?

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 08h58   #7
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
je vais retester ça tout à l'heure mais de memoire ça me donne une msgbox vide
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h47   #8
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 222
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 222
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
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
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 19h29   #9
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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 :
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 :
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"
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h25   #10
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
C'est ok pour moi avec ça :
Code :
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.
__________________

@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h21.


 
 
 
 
Partenaires

Hébergement Web