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

ASP Discussion :

Méthode Find ASP


Sujet :

ASP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 830
    Points : 240
    Points
    240
    Par défaut Méthode Find ASP
    Bonjour à tous,
    J'essaie en vain d'utiliser la méthode find en ASP 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sql ="Select Country from T_Comptes"
    Set rs = OpenRecordset(sql)
    if not rs.bof then
          rs.moveFirst()
        if rs.Find("Country='Norway'", 0,0) then
    	      response.write("OK") & ("<BR>")
     
    	    Else
    	      response.write("pas OK") & ("<BR>")
     
        end if
    end if
    Et ça ne fonctionne pas.La base a bien un champ "Country" et les 3 valeurs des champs sont = à "Norway" Si quelqu'un a une idée...

  2. #2
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 512
    Points : 2 319
    Points
    2 319
    Par défaut
    Bonsoir,
    pour vérifier si le recordset retourne un valeur on test Eof
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     sql = "Select Country from T_Comptes"
    Set rs = OpenRecordset(sql)
     
    If Not rs.EOF Then
        rs.Find "Country='Norway'", 0, 0 ' Recherche la première correspondance
        If Not rs.EOF Then
            Response.Write "OK - Enregistrement trouvé.<br>"
        Else
            Response.Write "Pas d'enregistrement correspondant.<br>"
        End If
    Else
        Response.Write "Le Recordset est vide.<br>"
    End If
    le Rs est forcément sur le premier enregistrement après OpenRecordset pas besoin de MoveFirst

    pourquoi utilise tu Find qui analyse la table entière pour un ressortir qu'un enregistrement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sql = "Select Country from T_Comptes WHERE Country='Norway'"
    Set rs = OpenRecordset(sql)
    If Not rs.EOF Then
         Response.Write "OK - Country: " & rs("Country") & "<br>"
    Else
        Response.Write "Pas d'enregistrements correspondants." & "<br>"
    End If

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 830
    Points : 240
    Points
    240
    Par défaut
    Bjr merci pour ta réponse, hélas ça ne marche pas...j'ai l'impression qu'il refuse la méthode find...voilà ce j'ai codé :
    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
     
    sub RechMail()
      Dim rs
      dim sql
      sql ="Select Country from T_Comptes"
      Set rs = OpenRecordset(sql)
      wMail=rs.Fields("Country").Value
      Response.Write("Country RS 2: ") & wMail & ("<BR>")
      Response.Write("L296") & ("<BR>")
    	If Not rs.EOF Then
    	     Response.Write("L298") & ("<BR>")
             rs.Find "Country='Norway'", 0, 0 ' Recherche la première correspondance
    		 Response.Write("L300") & ("<BR>")
           If Not rs.EOF Then
                  Response.Write "OK - Enregistrement trouvé.<br>"
                Else
                  Response.Write "Pas d'enregistrement correspondant.<br>"
           End If
               Else
                 Response.Write "Le Recordset est vide.<br>"
        End If
    	Response.Write("L305") & ("<BR>")
    end sub
    et voiçi sa réponse



    Country RS 2: Norway
    L296
    L298

    Il fait donc tout sauf le find.


    pourquoi utilise tu Find qui analyse la table entière pour un ressortir qu'un enregistrement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sql = "Select Country from T_Comptes WHERE Country='Norway'"
    Set rs = OpenRecordset(sql)
    If Not rs.EOF Then
         Response.Write "OK - Country: " & rs("Country") & "<br>"
    Else
        Response.Write "Pas d'enregistrements correspondants." & "<br>"
    End If
    Oui ça marche comme ça mais je ne comprends pas pourquoi le find ne fonctionne pas

  4. #4
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 512
    Points : 2 319
    Points
    2 319
    Par défaut
    Dans le contexte de VBA ou VB6, la méthode Find est utilisée pour rechercher des enregistrements dans un Recordset. La syntaxe correcte dépend des paramètres que tu veux utiliser pour la recherche.

    Paramètres de la méthode Find :

    1. Criteria :
    Une chaîne qui spécifie les critères de recherche, par exemple :

    "Country='Norway'"

    Cela indique que tu recherches un enregistrement où la colonne Country contient la valeur Norway.


    2. SkipRows (facultatif) :
    Le nombre d'enregistrements à ignorer avant de commencer la recherche.

    Si tu mets 0, la recherche démarre à partir de l'enregistrement actuel.

    Si tu mets une autre valeur (par exemple, 1), la recherche sautera ce nombre d'enregistrements avant de commencer.



    3. SearchDirection (facultatif) :
    La direction de la recherche :

    1 ou adSearchForward (par défaut) : Recherche vers l'avant (du point de départ vers la fin du Recordset).

    -1 ou adSearchBackward : Recherche vers l'arrière (du point de départ vers le début du Recordset).





    ---

    Comparaison des deux lignes :

    1. rs.Find "Country='Norway'", 0, 0

    Ici, 0 comme troisième paramètre pour SearchDirection est incorrect.

    Ce n'est pas une valeur valide (les seules valeurs acceptées sont 1 ou -1). Cela risque de provoquer une erreur ou un comportement imprévu.



    2. rs.Find "Country='Norway'", 0, 1

    Ici, 1 pour SearchDirection est correct.

    Cela signifie que la recherche sera effectuée vers l'avant, en partant de l'enregistrement courant.





    ---

    Conclusion :

    Tu dois écrire :

    rs.Find "Country='Norway'", 0, 1

    Cela garantit que la recherche est effectuée correctement en avant dans le Recordset.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 830
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Conclusion :

    Tu dois écrire :

    rs.Find "Country='Norway'", 0, 1

    Cela garantit que la recherche est effectuée correctement en avant dans le Recordset.
    Bjr ça marche tjrs pas :
    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
     
    sub RechMail()
      Dim rs
      dim sql
      sql ="Select Country from T_Comptes"
      Set rs = OpenRecordset(sql)
      wMail=rs.Fields("Country").Value
      Response.Write("Country RS 2: ") & wMail & ("<BR>")
      Response.Write("L296") & ("<BR>")
    	If Not rs.EOF Then
    	     Response.Write("L298") & ("<BR>")
             rs.Find "Country='Norway'", 0, 1 ' Recherche la première correspondance
    		 Response.Write("L300") & ("<BR>")
           If Not rs.EOF Then
                  Response.Write "OK - Enregistrement trouvé.<br>"
                Else
                  Response.Write "Pas d'enregistrement correspondant.<br>"
           End If
               Else
                 Response.Write "Le Recordset est vide.<br>"
        End If
    	Response.Write("L305") & ("<BR>")
    end sub
    sa réponse :

    Country RS 2: Norway
    L296
    L298

    Là c'est plutôt curieux...Pourtant je me suis repenché sur la doc ça correspond à ce que tu dis :

    https://www.w3schools.com/asp/met_rs_find.asp

  6. #6
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 512
    Points : 2 319
    Points
    2 319
    Par défaut
    Bonjour,
    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
     Sub RechMail()
      Dim rs
      dim sql
      sql ="Select Country from T_Comptes"
      Set rs = OpenRecordset(sql)
      wMail=rs.Fields("Country").Value
      Response.Write("Country RS 2: ") & wMail & ("<BR>")
      Response.Write("L296") & ("<BR>")
    	If Not rs.EOF Then
    	     Response.Write("L298") & ("<BR>")
    On error resume next
             rs.Find "Country='Norway'", 0, 1 ' Recherche la première correspondance
    Response.Write( err.descripton  & "<BR>")
    		 Response.Write("L300") & ("<BR>")
           If Not rs.EOF Then
                  Response.Write "OK - Enregistrement trouvé.<br>"
                Else
                  Response.Write "Pas d'enregistrement correspondant.<br>"
           End If
               Else
                 Response.Write "Le Recordset est vide.<br>"
        End If
    	Response.Write("L305") & ("<BR>")
    end sub

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 830
    Points : 240
    Points
    240
    Par défaut
    bjr merci pour ta réponse, j'ai trouvé la solution en partant de ton code, j'ai remarqué que le find partait tjrs du second enregistrement même avec le j'ai donc changé la direction en partant en arrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Find "Country='Norway'", 0, -1 ' Recherche la première correspondance
    et là ça marche.
    Si tu as des remarques n'hésite pas et merci encore pour ton aide.
    A+

  8. #8
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 512
    Points : 2 319
    Points
    2 319
    Par défaut
    Bonjour,
    Je t'avouerai que je n'utilise jamais cette option mais plutôt filter.

    Je suis pas certaine de l'intérêt en ASP3 , un close where me paraît plus approprié.

    Fen te permet de te positionner sur un enregistrement au sein de recordset. Ce qui veux dire que la table entière est chargée en mémoire. C'est beaucoup pour une seule valeur recherche.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 830
    Points : 240
    Points
    240
    Par défaut Tout ça pour ça !!!
    bsr,
    Finalement j'ai été trop vite dans ma réponse car en fait ça ne marche pas car il donne toujours une réponse positive même quand l'enregitrement recherché n'existe pas, en effet avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Find "Country='Norway'", 0, -1
    il part du début du recordset et n'est donc pas en eof donc il répond
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write "OK - Enregistrement trouvé.<br>"
    .
    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
     
    Sub RechMail()
      Dim rs
      dim sql
      sql ="Select Country from T_Comptes"
      Set rs = OpenRecordset(sql)
      wMail=rs.Fields("Country").Value
      Response.Write("Country RS 2: ") & wMail & ("<BR>")
      Response.Write("L296") & ("<BR>")
    	If Not rs.EOF Then
    	     Response.Write("L298") & ("<BR>")
             On error resume next
             rs.Find "Country='Norway'", 0, -1 ' Recherche la première correspondance
             Response.Write( err.descripton  & "<BR>")
    		 Response.Write("L300") & ("<BR>")
           If Not rs.EOF Then
                  Response.Write "OK - Enregistrement trouvé.<br>"
                Else
                  Response.Write "Pas d'enregistrement correspondant.<br>"
           End If
               Else
                 Response.Write "Le Recordset est vide.<br>"
        End If
    	Response.Write("L305") & ("<BR>")
    end sub
    Je me demande à mon niveau à quoi sert cette fonction find...
    Pour ma part je clos le sujet je ne l'utiliserai plus et ferai comme tu me l'as suggéré un recordset filtré
    A+

  10. #10
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 512
    Points : 2 319
    Points
    2 319
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.filter= "Country='Norway'"
    Je te suggère toujours d'utiliser une close where.

    La méthode Find sur un Recordset (ADO).

    1. Recherche ciblée :
    La méthode Find cherche un enregistrement qui correspond au critère spécifié. Contrairement à un filtre, elle ne modifie pas la visibilité des autres enregistrements dans le Recordset.


    2. Positionnement du curseur :

    Si un enregistrement correspondant est trouvé, le curseur se déplace sur cet enregistrement.

    Si aucun enregistrement ne correspond, le curseur reste à sa position actuelle.

    3. Conservation des données :
    Le Recordset reste intact : aucune donnée n'est exclue ou masquée. Il conserve l'intégralité de son contenu.


    4. Portée limitée :
    La recherche commence à partir de la position actuelle du curseur et va jusqu'à la fin du Recordset, à moins que tu ne réinitialises le curseur avec la méthode MoveFirst.



    En résumé, Find est effectivement une méthode pratique pour déplacer le curseur dans un Recordset sans modifier son contenu, ce qui la rend très utile pour localiser un enregistrement spécifique sans altérer les autres.

    J'ai commencé à manipuler des bases de données en 1991 et je n'ai jamais éprouvé le besoin d'utiliser la méthode find alors que j'ai utilisé filter très souvent.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/07/2006, 12h26
  2. [CR][ASP] interfaçage
    Par grosjej dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/04/2004, 11h20
  3. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 23h20
  4. Que pensez vous du mariage ASP Flash?
    Par tyma dans le forum Flash
    Réponses: 4
    Dernier message: 09/07/2003, 16h00
  5. |VB6] [Réseau] Lancer une page ASP
    Par Delphi-ne dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 18/10/2002, 17h10

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