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

VB.NET Discussion :

requete sql aleatoire avec rnd()


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut requete sql aleatoire avec rnd()
    Bonjour,

    Je tente d'effectuer un select aléatoire d'une ligne dans une bd access en vb.net.
    J'ai tester la requête dans Access et elle fonctionne comme il faut. J'utilise order by rnd(table.id) pour sélectionner la ligne aléatoirement. Cependant dans la prog vb, la ligne est toujours la même...
    Je vois pas d'où peut venir le problème, si quelqu'un a une piste...

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Le problème c'est lq fonction rafom de VB ...
    En fait ça choisit aléatoirement mais toujours selon la même logique.
    Donc tu vas avoir comme série aléatoire toujours la même. Exemple : 8, 19, 3, 7, 21, 5 etc. a chaque fois que tu rééxecutes ton programme.

    La piste la plus facile pour changer ça serait de recalculer le résultat du random en fonction de l'heure, des minutes, des secondes, un truc du genre.

    Si toutefois ça ne te dérange pas et que tu veux seulement ne pas toujours te retrouver avec 8 pendant l'éxécution du programme, il faut que tu ne rédéclare pas un random à chaque fois, mais que tu réutilise le même, sinon il entame à chaque fois la série, donc il te retournera chaque fois 8.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    salut, merci pour ta réponse. Cependant la fonction rnd que j'utilise n'est pas celle de vb, elle est dans la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 1 * FROM truc WHERE truc.nom='toto' ORDER BY rnd(truc.id);
    Dans l'utilitaire de requête d'Access la requête me renvoi bien un résultat différent à chaque exécution.

    Dans mon cas, la fonction rnd() est une fonction sql pas une fonction de vb.

    J'ai tout essayé mais rien à faire, prise seule dans Access la requête marche mais pas dans le prog en vb....

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Ah quand tu disais dans le programme VB le résultat est toujours le même je pensais que tu le générais cette fois avec le VB.
    Du coup je ne vois plus vraiment où peut se situer le problème.

    Pour communiquer avec la base access tu utilises quel type de connection ?
    Peut être que l'émulation du rnd() est mal faite...

    Peut être que tu pourrais le contourner en utilisant un rnd() fait en VB, tout en connaissant le problème des rnd() de VB.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Je pense que quand tu es dans Access le Rnd qui est utilisé est celui de VBA.

    Quand tu n'es plus dans Access, il n'est plus disponible.

    Il faut que tu te débrouilles avec le random de VB.NET, par exemple en récupérant le max(truc.id) et générant un random <= à ce dernier.

    Après tu peux exécuter par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM truc WHERE truc.nom='toto' and truc.id >= %rnd ORDER BY truc.id

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    Citation Envoyé par EMC51 Voir le message
    Je pense que quand tu es dans Access le Rnd qui est utilisé est celui de VBA.

    Quand tu n'es plus dans Access, il n'est plus disponible.

    Il faut que tu te débrouilles avec le random de VB.NET, par exemple en récupérant le max(truc.id) et générant un random <= à ce dernier.

    Après tu peux exécuter par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 * FROM truc WHERE truc.nom='toto' and truc.id >= %rnd ORDER BY truc.id
    Ok ca explique tout, je vais faire avec le random de vb alors
    Merci pour ton aide

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    mon premier post était pas très clair mais effectivement.

    Je me connecte à la base avec ADO.NET je récupère les données dans un datareader.

    J'avais pensé à utiliser le random de vb mais ca m'oblige à faire plusieurs requêtes pour connaitre le nombre d'enregistrement total et le récupérer, ce que je voulais éviter mais je pense que je vais finir par faire comme ca...
    Encore merci pour ton aide

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

Discussions similaires

  1. requete SQL dynamique avec checkbox
    Par Mickael Scofild dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 29/08/2007, 15h00
  2. Réponses: 1
    Dernier message: 15/05/2007, 17h31
  3. Réponses: 5
    Dernier message: 15/05/2007, 16h19
  4. requete SQL: where avec parametre variable
    Par dracula2000 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/05/2006, 22h46
  5. Requete SQL croisée avec la clause Like
    Par Orgied dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/03/2006, 16h36

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