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

Access Discussion :

Requête de sélection et DoCmd.RunSQL


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Requête de sélection et DoCmd.RunSQL
    Bonjour,
    j'ai quelques petits soucis de code...
    En fait, lorsque j'exécute une requete via Design, la requête s'exécute normalement... Le problème est que je dois la traiter dans un événement, j'ai donc recopié la commande sql mais celle-ci ne veut pas être exécutée...
    Cette requête doit en fait demander à l'utilisateur le no d'OR et la requete doit rechercher dans la table T_Registre si un record possède le champ C_OR (qui est la clé primaire) = au inputbox (NoOR)
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim strSql as String 
    strSql = "SELECT T_Registre.C_OR, [NoOR] AS Expr1
    FROM T_Registre
    WHERE (T_Registre.C_OR=NoOr)
    ORDER BY T_Registre.C_OR"
    en faisant ensuite:
    j'ai une runtime erreur 2342 'A RunSql action requires an argument consisting of an SQL Statement...'
    En fait, je voudrais aussi apres pouvoir faire un test si le record est trouvé de l'afficher dans la forme courante en read-only sinon que l'utilisateur puisse encoder un nouveau record...

    Merci pour vos réponses.

  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,

    DoCmd.RunSQL ne fonctionne qu'avec des requêtes actions (INSERT, UPDATE, DELETE), pas avec des SELECT.

    Crée plutôt une zone de texte dans laquelle l'utilsateur entre la valeur recherchée.
    Puis tu crée ta requête.

    Si OR est numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim strSql as String 
    strSql = "SELECT T_Registre.C_OR " & _
    "FROM T_Registre " &  _
    "WHERE (T_Registre.C_OR=" & Me.tbOR & ") " & _
    "ORDER BY T_Registre.C_OR"
    Si OR est texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim strSql as String 
    strSql = "SELECT T_Registre.C_OR " & _
    "FROM T_Registre " &  _
    "WHERE (T_Registre.C_OR='" & Me.tbOR & "') " & _
    "ORDER BY T_Registre.C_OR"
    tbOR est le nom du contrôle zone de texte.

    Pour afficher le résultat, tu insère un sous formulaire et utilise la requête ci-dessus pour alimenter le sous-formulaire.
    Si le nom du contrôle sous-formulaire est sfmResultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Me.sfmResultat.Form.RecordSource = strSQL
    Me.sfmResultat.Form.Requery
    Bon courage.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci, cela fonctionne enfin presque...
    Lorsque je tape le no d'or a afficher dans le sous-formulaire, je vois bien qu'il l'affiche mais il m'affiche une erreur comme quoi la plaque ne peut contenir une valeur nulle.
    Dans mon sous formulaire, je vois bien la plaque apparaître mais plus dans mon formulaire => l'erreur... C'est comme-ci il ne terminait pas de compléter le formulaire...
    PS: je ne sais pas si ça peut aider mais le sous formulaire est dans le meme formulaire que le formulaire de base...
    Aussi si je tape un no d'OR qui n'existe pas, il m'affiche aussi l'erreur... Ce serait bien qu'il affiche un message pour dire qu'il n'a pas trouve mais comment faire pour que si il ne trouve pas de record il affiche un message?

    Merci d'avance,
    Cédric

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé
    Le controle de la zone de texte tbOR etait lié avec le champ C_OR...
    Je l'ai enlevé et c'est maintenant OK...

    Merci encore

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Une dernière petite question:
    Quelle serait la syntaxe pour refaire la même chose que dans le code précédent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.sfmResultat.Form.RecordSource = strSQL
    Me.sfmResultat.Form.Requery
    mais à partir d'un evenement click sur un champ du sous formulaire sfmResultat?
    Cela doit être tout bête mais je n'y arrive pas...

    Merci d'avance,
    Cédric

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 171
    Points : 72
    Points
    72
    Par défaut
    Salut à tous.

    J'ai testé dans une base perso la commande de LedZeppII, et ça me met une erreur :
    Erreur d'exécution '2467' :

    L'expression entrée fait référence à un objet fermé ou supprimé.
    Quand je fais "débogage", l'erreur pointe sur la première des deux lignes (Me.frmResultat.Form.RecordSource = strSQL).

    Y a t-il une autre opération à executer avant pour ouvrir cet objet ?
    Je ne comprend pas mon erreur ...

    Merci.

  7. #7
    Membre actif Avatar de Mariboo
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 254
    Points : 238
    Points
    238
    Par défaut
    ça vient de ton formulaire ....

    est ce que "frmResultat" est ton formulaire principale ou un sous form ??

    Si c'est un formulaire principal t'as juste à écrire :

    Me.Recordsource = strSQL

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 171
    Points : 72
    Points
    72
    Par défaut
    Oui, c'est un sous formulaire...

  9. #9
    Membre actif Avatar de Mariboo
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 254
    Points : 238
    Points
    238
    Par défaut
    a la place de Me.frmResultat.form.recordSource
    Ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    forms![Formulaire principal]![frm Resultat].form.recordsource

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 171
    Points : 72
    Points
    72
    Par défaut
    Même erreur...

  11. #11
    Membre actif Avatar de Mariboo
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 254
    Points : 238
    Points
    238
    Par défaut
    Tu t'ai pas trompé dans le nom du sous form ?
    Il est bien ouvert ?

    Sinon je sais pas quoi te répondre .... DESOLE.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 171
    Points : 72
    Points
    72
    Par défaut
    Je ne sais pas s'il est ouvert, car je ne sais pas comment faire pour savoir s'il est ouvert, ni même pour l'ouvrir.
    En principe eil est ouvert, puisque c'est un sous formulaire du formulaire en cours...
    Voilà ce que je peux dire de plus...

    Merci de votre aide...

  13. #13
    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 Réponse à susiced
    Citation Envoyé par susiced
    Une dernière petite question:
    Quelle serait la syntaxe pour refaire la même chose que dans le code précédent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.sfmResultat.Form.RecordSource = strSQL
    Me.sfmResultat.Form.Requery
    mais à partir d'un evenement click sur un champ du sous formulaire sfmResultat?
    Le code étant au niveau du sous-formulaire on utilise la forme la plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Me.RecordSource = strSQL
    Me.Requery
    Ici, Me fait référence au formulaire sfmResultat puisque le code du click est dans sfmResultat.
    Alors qu'avant Me faisait référence au formulaire contenant le sous-formulaire sfmResultat.

    J'espère que c'est à peu près clair.

    Bon courage

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Chez moi tout fonctionne maintenant...

    Merci à tous

    PS: si quelqu'un à une idée pour récupérer la variable système username...

    Merci d'avance,
    Cédric

  15. #15
    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
    Citation Envoyé par susiced
    PS: si quelqu'un à une idée pour récupérer la variable système username...
    ou par API windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ' Get User Name
    Private Declare Function GetUsrName Lib "advapi32.dll" Alias "GetUserNameA" _
            (ByVal name As String, l As Long) As Boolean
    
    Function GetUserName()
    Dim UserName As String, Result As Boolean, i As Integer, l As Long
     UserName = String(256, vbNullChar): l = 255
     Result = GetUsrName(UserName, l)
     i = InStr(1, UserName, vbNullChar)
     If Result Then GetUserName = Left(UserName, i - 1) Else GetUserName = ""
    End Function

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ca fonctionne
    Merci pour tout,
    Cédric

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

Discussions similaires

  1. rassembler 2 requ[ete.
    Par shirya dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/09/2005, 13h59
  2. Requ^te avec 2 COUNT ?
    Par Freiya dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/07/2005, 13h21
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43
  4. comment rajouter un caractère " ' " dans une requê
    Par GDVL dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 30/07/2004, 16h58

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