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 :

Probleme avec un "order by"


Sujet :

ASP

  1. #1
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut Probleme avec un "order by"
    Bonjour les gens!
    ca fait des heures entieres que je tourne en rond sur le meme probleme et je n'arrive pas a trouver mon erreur.
    Je m'explique:

    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
     
    		Set Rs = Server.CreateObject("ADODB.Recordset")
    		Rs.ActiveConnection = MM_LBS_STRING
    		Rs.Source = "SELECT Username FROM dbo.Gateway where username like 'Frei%' order by Username"
    		Rs.CursorType = 0
    		Rs.CursorLocation = 2
    		Rs.LockType = 1
    		Rs.Open()
    		Dim tmp
    		Dim i : i=1
    		Dim ok : ok=false
    		While not rs.eof and (ok=false)
    				if (Rs("username")= "Frei"&i) then
    					i=i+1
    				else 
    					tmp="Frei"&i
    					ok=true
    				end if
    			Rs.movenext()
    		wend
    		rs.movefirst()
    		rs.close()
    le champ Username tel que je l'ai defini ds le select est dc de type : Frei1 Frei23 etc...
    comme ils ne sont pas tries ds la table, j'utilise dc le "order by"
    je souhaite parcourir cette liste de username, et recuperer le premier Frei&i qui n'existe pas encore...
    or a chaque fois il me sort Frei2, alors que celui ci existe deja
    Je c pas si je me suis bien expliquee, ms si qn m'a compris, il peut m'aider a trouver mon erreur?

  2. #2
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    Je c pas si je me suis bien expliquee
    ben non pas vraiment .......

  3. #3
    Expert confirmé
    Avatar de grafikm_fr
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 470
    Points : 5 059
    Points
    5 059
    Par défaut
    Attends, j'ai pas tout compris...

    Si tes usernames sont tous de la form Frei1,Frei2...Frei54 etc... et ben:

    Tu ouvres ton RS en triant par login
    Tu fais RS.MoveLast -> ca te donne le dernier qui existe
    Apres tu recupere le nombre et tu fais +1 pour avoir le premier qui existe pas encore....

    Voila.
    Grafikm

  4. #4
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    non effectivement me suis pas bien explikee...
    en fait ds mon champ username g : soit un login valable, soit un login de type frei et tout ca completement ds le desordre, mais attention, par exemple :
    frei1
    frei2
    frei3
    frei5
    ....
    existent mais pas frei4
    dc pour commencer j'elimine tous les login de type valable par mon like 'Frei%' puis je les trie par Order by username
    est-ce que c plus clair?
    (si on me repond non je ne serais pas surprise... pcq g bcp de mal ce matin)

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par grafikm_fr
    Attends, j'ai pas tout compris...

    Si tes usernames sont tous de la form Frei1,Frei2...Frei54 etc... et ben:

    Tu ouvres ton RS en triant par login
    Tu fais RS.MoveLast -> ca te donne le dernier qui existe
    Apres tu recupere le nombre et tu fais +1 pour avoir le premier qui existe pas encore....

    Voila.
    Grafikm
    y'a un probleme dans ton raisonnement car si un enregistrement est supprime entre temps, alors le nombre d'enregistrement ne sera plus en phase avec la creation de ces noms
    y'a des exceptions a gerer ou alors mieux utiliser al manipulation des chaines de caracteres

  6. #6
    Expert confirmé
    Avatar de grafikm_fr
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 470
    Points : 5 059
    Points
    5 059
    Par défaut
    Oui, je m'en suis apercu, mais de tte facon j'ai mal compris le pb, donc ce code est à mettre à la poubelle de tte maniere....

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    je crois que j'ai trouvé ton probleme

    a quoi te sert la valeur tmp dans ton else?

  8. #8
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    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
     
    Rs.source = "UPDATE dbo.Gateway SET " & _
    		"Username = '"&tmp&"', " & _
    		"Gateway = '', " & _
     
    		"AnzahlSessions = 0, " & _
     
    		"AutoDia1 = '', " & _
     
    		"AutoDia2 = '', " & _
     
    		"AutoDia3 = '', " & _
     
    		"AutoDia4 = '', " & _
     
    		"AutoDia5 = '' " & _
    		"WHERE LTG = '" & LTG & "';"
    		Rs.Open()
    		Rs.Close()
    je le recupere donc apres pour modifier un enregistrement (ca ca fonctionne)

  9. #9
    Expert confirmé
    Avatar de grafikm_fr
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 470
    Points : 5 059
    Points
    5 059
    Par défaut
    Je crois que j'ai trouvé qqch, moi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    While not rs.eof and (ok=false) 
                if (Rs("username")= "Frei"&i) then 
                   i=i+1 
                else 
                   tmp="Frei"&i 
                   ok=true 
                end if 
             Rs.movenext() 
          wend
    Tout le pb est là...
    Il faut mettre While (NOT RS.EOF) AND (OK=False)

    Sinon, not RS.EOF AND OK=False <=> not RS.Eof OR OK=True, et c'est le cas des la 2eme iteration, donc il sort et met Frei2.

    Je me trompe peut-etre mais c'est à verifier...

    Grafikm[/code]

  10. #10
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    j'ai essaye et ca donne toujours frei2...
    merci ad meme

  11. #11
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    non le probleme c'est qu'il ne detecte pas le dernier "frei" que tu souhaite recuperer, il s'arrete avant.
    il te renvoie frei2 parce que tu dois certainement tomber sur un enregistrement qui n'a pas de username de type "frei"&i (le deuxieme surment) et donc il te renvoie true, et affiche frei2

  12. #12
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    je ne vois pas ce que tu veux dire...

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    est-ce que tu as aussi d'autres enregistrements qui n'ont pas un username de type "frei"&i ?

  14. #14
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    ben soit c des login de type lin8boe ou alors des "frei"&i

  15. #15
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    j'ai une question :
    le order by il trie :

    frei1
    frei10
    frei12
    frei2
    etc

    ou

    frei1
    frei2
    frei10
    frei12

    ???

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    je saurais pas te dire

    affiche les pour voir

    comme c'est de l'ordre alphabetique, la premiere solution semble la plus logique

    dans ce cas c'est ton algorithime qu'il faut revoir

  17. #17
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    je v essayer de les afficher alors pour voir

  18. #18
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    Frei1
    Frei1000
    Frei1001
    Frei1002
    Frei1003
    Frei1004
    Frei1005
    ...
    c bien ce que je pensais

    dc on efface tout et on recommence!

  19. #19
    Membre actif Avatar de LineLe
    Inscrit en
    Septembre 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 285
    Points : 246
    Points
    246
    Par défaut
    decidement je suis vraiment polyo ajd :
    j'ai essaye ca :
    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
     
    Dim tmp
    		Dim i : i=1
    		Dim ok : ok=false
     
    		while (ok=false)
    			if (rs("username")="Frei"&i) then 'LIGNE 117
    				rs.movefirst()
    				i=i+1
    			else if rs.eof then
    					tmp="Frei"&i
    					ok=true
    				 else
    				 	rs.movenext()
    				 end if
    			end if
    		wend
    et ca me donne l'erreur :
    Exception occurred.
    /Siemensemu/speichern.asp, line 117

    : a comprend pas ce qui se passe :

  20. #20
    Expert confirmé
    Avatar de grafikm_fr
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 470
    Points : 5 059
    Points
    5 059
    Par défaut
    Essaie plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (rs("username")="Frei" & Cstr(i)) then 'LIGNE 117

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probleme avec distinct et order by
    Par meri_mima dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/10/2009, 18h07
  2. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 14h16
  3. Réponses: 2
    Dernier message: 30/08/2004, 15h48

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