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

Macros et VBA Excel Discussion :

entrer un paramètre dans une requête


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut entrer un paramètre dans une requête
    Bonsoir,

    j'ai une requête qui requiert un paramètre "param". Je souhaite atteindre ma requête via un recordset par du code, grâce à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec2 = CurrentDb.OpenRecordset("DERNIERS", dbOpenSnapshot,param)
    DERNIERS étant le nom de ma requête...
    Mais, les connaisseurs l'auront vu du premier coup d'oeil! ça ne marche pas ,ce n'est pas ainsi qu'on entre un paramètre..
    le problème étant que ça fait un moment que je cherche dans un ouvrage spécifique, sur l'aide de VB...je ne trouve pas comment le faire!
    Donc je vous pose la question:
    l'un de vous saurait-il m'indiquer comment entrer le paramètre d'une requête par code,s'il-vous-plait?

    merci d'avance

    schwarzy2
    Feel good, feel geek

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Bonjour schwarzy,

    essaie de faire comme cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rec2= CurrentDb.OpenRecordSet("SELECT * FROM [" & ExtractFileName(csvFileName) & "]", dbOpenSnapshot,param)
    j'ai mis en forme selon ta ligne, ici ca fait en gros une requete sur un fichier csv, après à toi de mettre ce que tu veux dedans

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2003
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 274
    Points : 372
    Points
    372
    Par défaut
    Salut,

    Je ne m'y connais pas de trop mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set recordset = object.OpenRecordset (type, options, lockedits)
    The OpenRecordset method syntax has these parts.

    recordset An object variable that represents the Recordset object you want to open.
    object An object variable that represents an existing object from which you want to create the new Recordset.
    source A String specifying the source of the records for the new Recordset. The source can be a table name, a query name, or an SQL statement that returns records. For table-type Recordset objects in Microsoft Jet databases, the source can only be a table name.
    type Optional. A constant that indicates the type of Recordset to open, as specified in Settings.
    options Optional. A combination of constants that specify characteristics of the new Recordset, as listed in Settings.
    lockedits Optional. A constant that determines the locking for the Recordset, as specified in Settings.


    Settings

    You can use one of the following constants for the type argument.

    dbOpenTable Opens a table-type Recordset object (Microsoft Jet workspaces only).
    dbOpenDynamic Opens a dynamic-type Recordset object, which is similar to an ODBC dynamic cursor. (ODBCDirect workspaces only)
    dbOpenDynaset Opens a dynaset-type Recordset object, which is similar to an ODBC keyset cursor.
    dbOpenSnapshot Opens a snapshot-type Recordset object, which is similar to an ODBC static cursor.
    dbOpenForwardOnly Opens a forward-only-type Recordset object.


    Note If you open a Recordset in a Microsoft Jet workspace and you don't specify a type, OpenRecordset creates a table-type Recordset, if possible. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset. In an ODBCDirect workspace, the default setting is dbOpenForwardOnly.

    You can use a combination of the following constants for the options argument.


    => Question : ton param il indique quoi exactement ?
    Vous avez la réponse à votre question ? Mettez votre sujet en

    Une personne vous a correctement aidé ? Cliquez sur le

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    il faut, je pense, renseigner le parametre avant de lancer la requete.
    un exemple tiré du tutoriel de Tofalu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim oDb As DAO.Database
    Dim oQdf As DAO.QueryDef
    Dim oRst As DAO.Recordset
    Set oDb = CurrentDb
    Set oQdf = oDb.QueryDefs("R01")
    oQdf.Parameters("Num").Value = "AF36"
    Set oRst = oQdf.OpenRecordset
    cordialement,

    Philippe

  5. #5
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut
    Bonjour,
    alors déja merci pour vos réponses, je vais tester tout ça dès que j'ai du temps...ce qui n'est pas le cas là maintenant
    pour répondre à la question de eagleleader mon param renseigne le numéro du produit
    J'ai une table qui comprend plusieurs champs, dont le numéro du produit, et je veux que la requête n'affiche que les lignes concernant le produit numéro param.
    Et en ce qui concerne l'utilisation de OpenRecordset ,j'ai déja essayé justement...et sans succès, parce que ni type ,ni options ,ni lockedits ne renseigne ce que je veux...J'avais pensé que options servait à entrer les paramètres mais comme tu as pu le lire ce n'est pas le cas....ou alors c'est moi qui m'y prends come un pied????(option que je n'exclue pas!!!)
    en tout cas merci à tous...je m'y mets et je donne des nouvelles!
    Feel good, feel geek

  6. #6
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut
    philben , j'ai essayé ce que tu m'a smis et j'ai regardé le tuto de tofalu dessus, seulement je ne comprends vraiment pas,j'ai une requête DERNIERS qui a pour paramètre num_ligne de type texte.

    et j'ai un message d'erreur "element non trouvé dans cette collection" avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim oqdf As DAO.QueryDef  
    Dim rec2 As Recordset
     
    Set oqdf = CurrentDb.QueryDefs("DERNIERS")
    oqdf.Parameters("num_ligne").Value = "2"
    alors je ne vois vraiment pas pourquoi,j'ai l'impression de tourner en rond..., si quelqu'un avait ne serait-ce qu'un début d'explication????
    Feel good, feel geek

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Soit Querydefs ne trouve pas votre requete "DERNIERS", soit il ne trouve pas votre paramètre.

    Il faudrait faire un debbogage pas a pas sur ce code pour savoir sur quoi il plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim oqdf As DAO.QueryDef
    Dim rec2 As DAO.Recordset
    Set oqdf = CurrentDb.QueryDefs("DERNIERS") 'ligne 1
    Debug.Print oqdf.Parameters.Count
    Debug.Print oqdf.sql
    oqdf.Parameters("Num_ligne") = "2" 'ligne 2
    s'il plante sur <ligne 1>, il ne trouve pas la requete.
    s'il plante sur <ligne 2>, il ne trouve pas le paramètre.

    si ça passe, il devrait afficher un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     1 
    PARAMETERS Num_Ligne Text ( 255 );
    SELECT  ...
    cordialement,

    Philippe

  8. #8
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut
    Bonjour Philippe,

    alors en fait il est clair que c'est sur la ligne 2 qu'il plante, l'autre ligne passe sans problème, et avec votre code(désolé pour mon tutoiement de l'ancien message, je ne savais pas) dans lequel j'ai replacé Num_ligne par num_ligne
    j'obtiens ceci:
    1
    SELECT *
    FROM ligne
    WHERE num_ligne=[];

    puis le même message d'erreur...
    j'ai fait un copier-coller de num_ligne pour être sur mais il n'y a pas d'erreur c'est bien le bon nom de paramètre, sans erreur de majuscule ou autre...

    voyez-vous une explication?

    merci d'avance

    Cordialement

    schwarzy2
    Feel good, feel geek

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    désolé pour mon tutoiement de l'ancien message, je ne savais pas
    Pas de problème, au contraire

    A mon avis tu n'as pas défini correctement ta requete paramétrée.
    En effet, le nombre total de paramètre est bien à 1 car il considère que <[]> dans la requete correspond à un paramètre.

    La solution pas bien propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set oqdf = CurrentDb.QueryDefs("DERNIERS")
    oqdf.Parameters(0) = "2"
    une solution correcte :
    Une requete paramétrée commence par la liste des paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PARAMETERS PNum_Ligne Text ( 255 );
    puis la requete proprement dite qui utilise le paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM ligne
    WHERE num_ligne=[PNum_Ligne];
    soit une requete paramétrée enregistrée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS PNum_Ligne Text ( 255 );
    SELECT *
    FROM ligne
    WHERE num_ligne=[PNum_Ligne];
    Et le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    Set oqdf = CurrentDb.QueryDefs("DERNIERS")
    'Debug.Print oqdf.Parameters.Count
    'Debug.Print oqdf.sql
    oqdf.Parameters("PNUM_LIGNE") = "2"
    ...
    en espérant que le problème soit résolu...

    Philippe

  10. #10
    Membre actif Avatar de schwarzy2
    Femme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2006
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 464
    Points : 288
    Points
    288
    Par défaut

    ...en gros: merci beaucoup Philippe!!!!!!!
    et les autres pour votre aide!!!!
    Feel good, feel geek

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

Discussions similaires

  1. Entrer la valeur d'un paramètre dans une requête paramétrée
    Par emeric2502 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/11/2014, 20h22
  2. Réponses: 1
    Dernier message: 21/03/2006, 14h29
  3. Paramètres dans une requête
    Par christellel198 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/10/2005, 13h49
  4. Réponses: 7
    Dernier message: 18/05/2005, 15h09
  5. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 12h46

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