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

Delphi Discussion :

Base de données Keno


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 226
    Par défaut Base de données Keno
    Bonjour
    J'ai une base de donnée Keno avec les 20 numéros tirage midi et soir
    et je voudrais savoir comment je peux faire pour trouver dans cette base
    les 4 numéros les plus sortis dans chaque tirage par ordre.
    Ma table est Dbase.
    Merci pour une idée !

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    DBASE c'est pas du récent
    Sans nous fournir de description de la table c'est encore moins aisé, j'imagine qu'il s'agit d'une sorte de matrice genre N1,...,N20 avec une clé date:heure ?

    si c'est plus un truc plus "atomisé" de type date,heure,numero ce serait trop facile avec une simple requête encore que, avec DBASE cela demanderait certainement deux passes selon mes souvenirs de Paradox
    1 - SELECT NUMERO,COUNT(*) AS C FROM TIRAGE // sauvé dans un fichier .sql i.e classement.sql
    2 - SELECT NUMERO,C FROM classement.SQL ORDER BY C

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 226
    Par défaut
    bonjour et merci

    j'ai déjà une fonction qui me dit si les 4 chiffres que j'ai rentré sont
    sorti en meme temps mais moi je voudrais savoir combien de série de 4 chiffres sont sorti en meme temps
    sans avoir a rentrer une série
    pour la base oui tu a raison j'ai la date heure midi ou soir la série des 20 boules tirer et le gain

    pour l'instant j'ai fait une procedure qui me tire aléatoirement 4 boules que je passe sur la base et me ressorte le nombre de fois sortie

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 226
    Par défaut
    bonjour

    je pensais faire sa
    premier tirage si 4 chiffres
    1234
    1235
    1236
    ect.. jusqu’à 70
    après
    2345
    2346
    ect..
    et a chaque fois je teste si les 4 chiffres sont sortie

    ++

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    cette méthode me semble très longue !
    Je vous propose d'utiliser des requêtes (query)
    pour créer la table vous pouvez par exemple faire ceci
    (R1)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT JOUR,HEURE,NUMERO1 AS NUMERO FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,NUMERO2 FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,NUMERO3 FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,NUMERO4 FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,NUMERO5 FROM KENO.DBF
    ... // je pense que vous avez compris le principe ;)               
    UNION 
    SELECT JOUR,HEURE,NUMERO20 FROM KENO.DBF
    Enregistrez ce SQL (dument complet) dans le même endroits que votre table par exemple sous numeros.SQL

    Ceci vous donnera tous les numéros tirés
    Entre parenthèses si vous réduisez par une clause WHERE l'ensemble des résultats à un tirage vous obtenez la même chose que votre fonction de tri des numéros tirés d'un tirage

    Ensuite une nouvelle requête
    (R2)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NUMERO,COUNT(*) AS C FROM numeros.SQL
    ORDER BY C,NUMERO
    Idem enregistrez la requête par exemple en nombredefois.sql
    N.B. vous remarquerez que, après test (test avec le programme module base de données DBD32.exe de D7) j'ai fusionné (et corrigé) les deux précédents SQL proposés

    Vous n'aurez alors qu'à ouvrir dans le programme la "table" nombredefois.sql et extraire le nombre d'enregistrements que vous souhaitez vous aurez alors les numéros les plus sortis
    Bien évidemment mon jeu d'essai ne se contentait que de deux tirages mais le principe est posé et les SGBD "modernes" seraient plus rapides

    Pour une séquence de 4 chiffres au sein d'un tirage c'est bien sûr beaucoup plus complexe ! Surtout si les numéros ne sont pas en ordre

    Ils seraient en ordre la solution serait
    (R1)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT JOUR,HEURE,CAST(NUMERO1 AS CHAR(2))+CAST(NUMERO2 AS CHAR(2))+CAST(NUMERO3 AS CHAR(2))+CAST(NUMERO4 AS CHAR(2)) AS COMBINAISON FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,CAST(NUMERO2 AS CHAR(2))+CAST(NUMERO3 AS CHAR(2))+CAST(NUMERO4 AS CHAR(2))CAST(NUMERO5 AS CHAR(2)) AS COMBINAISON FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,CAST(NUMERO3 AS CHAR(2))+CAST(NUMERO4 AS CHAR(2))+CAST(NUMERO5 AS CHAR(2))CAST(NUMERO6 AS CHAR(2)) AS COMBINAISON FROM KENO.DBF
    .....
    Sauf que les unités posent un souci, exemple : si j'ai les valeurs 4,6,12,45 COMBINAISON aura la valeur 461245 alors qu'il faudrait 04061245 et là j'ai bien l'impression que ce n'est pas possible avec le peu que propose le LocalSQL de Borland, une solution 4_6_1245 est possible mais la requête s'alourdit !
    (R1)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT JOUR,HEURE,
    SUBSTRING(CAST(NUMERO1 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO2 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO3 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO4 AS CHAR(2)+'_' FROM 1 FOR 2)   AS COMBINAISON
    FROM KENO.DBF
    UNION
    SELECT JOUR,HEURE,
    SUBSTRING(CAST(NUMERO2 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO3 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO4 AS CHAR(2)+'_' FROM 1 FOR 2)+
    SUBSTRING(CAST(NUMERO5 AS CHAR(2)+'_' FROM 1 FOR 2)
    FROM KENO.DBF
    UNION
    ...
    Cela commence à faire beaucoup mais admettons (toujours à sauvegarder dans un fichier SQL)

    (R2) deviendrait
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COMBI,COUNT(*) AS C FROM numeros.SQL
    ORDER BY COMBI,NUMERO

    Avec sélection de la combinaison cela permettrait de répondre à la question combien de fois est sortie telle <combinaison> (cette valeur respectant le principe exposé plus haut les unités sont suivies d'un espace)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COMBI,COUNT(*) AS C FROM numeros.SQL
    WHERE COMBI='<combinaison>'
    ORDER BY COMBI,NUMERO

    dans le programme un TQuery aura donc la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Query1.Active:=False;
    Query1.SQL.Text:='SELECT COMBI,COUNT(*) AS C FROM numeros.SQL  ORDER BY COMBI,NUMERO'
    Query1.Active:=True;
    For i:=1 to 5 do   // 5 premières combinaisons les plus sorties
     begin
      Memo1.Lines.Add(Query1.FieldByname('COMBI').asString;
      Query1.Next;
     end;
    Query1.Active:=False;
    P.S. Évidemment un SGBD moderne (permettant tant qu'à faire des fonctions de fenêtrage) et/ou une base mieux pensée serait une idée à envisager

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 226
    Par défaut
    bonjour
    merci pour le mal de tête
    je vais essaye de combiner tous sa mais ce n'est pas gagné
    moi et les requêtes
    ++

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

Discussions similaires

  1. Tirage aléatoire dans une base donnée
    Par leloup84 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/01/2006, 16h13
  2. Création d'un alias sur base données "Microsoft Text Dr
    Par defluc dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/06/2005, 08h28
  3. Réponses: 6
    Dernier message: 04/05/2005, 09h58
  4. Delphi - Base donnée Paradox, problème de nom des champs
    Par mjp dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/01/2005, 21h10
  5. base données avec java mono et multi utilisateurs
    Par Garion dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 03/12/2004, 09h20

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