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 :

Vitesse de recherche sur une DB de 364000 mots


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut Vitesse de recherche sur une DB de 364000 mots
    Bonjour,

    J'ai développé sous ACCESS un jeux de mots basé sur un dictionnaire de 364000 mots, je suis en train de réécrire cette application en Visual Basic 2010.

    Dans la version access, j'utilisais une méthode seek pour vérifier si le mot tapé au clavier était correct, ceci était très rapide et me permettait de vérifier le mot tapé lettre par lettre et signaler en direct s'il est présent ou non ds le dico.

    en Visual Basic, j'utilise une requête SQL pour vérifier le mot mais ceci est très lent et nuit à le fluidité du jeu, y a-t-il une méthode qui me permettrait d'obtenir le même résultat que SEEK en VBA?

    ps : Je me connecte à la db ACCESS

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    quelle est ta requête exactement ?
    y a t il un index sur la table ?

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je chargerai l'ensemble de la table en mémoire au début du jeu et je construirai un Dictionnary<string,bool> avec tous les mots.

    Le chargement devrait prendre de l'ordre de 2 secondes et la vérification via un ContainsKey d'un mot sera très rapide.


    Si l'implémentation des collections est bien faite en .net, le plus performant serait :
    • de transférer les mots de la DataTable vers une List<string> temporaire,
    • de remplir une SortedList<string> de recherche avec un AddRange de la list temporaire,
    • de faire la recherche via un IndexOf sur la SortedList.

  4. #4
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut Réponse à Freddyev
    Citation Envoyé par freddyev Voir le message
    Bonjour,

    J'ai développé sous ACCESS un jeux de mots basé sur un dictionnaire de 364000 mots, je suis en train de réécrire cette application en Visual Basic 2010.

    Dans la version access, j'utilisais une méthode seek pour vérifier si le mot tapé au clavier était correct, ceci était très rapide et me permettait de vérifier le mot tapé lettre par lettre et signaler en direct s'il est présent ou non ds le dico.

    en Visual Basic, j'utilise une requête SQL pour vérifier le mot mais ceci est très lent et nuit à le fluidité du jeu, y a-t-il une méthode qui me permettrait d'obtenir le même résultat que SEEK en VBA?

    ps : Je me connecte à la db ACCESS

    Bonjour Freddyev,

    J'ai un lexique de 240.000 mots en fichier texte (que j'embarque en ressource dans un programme de mot-croisés, puis que j'efface immédiatement après, afin qu'il ne soit ps pompé), ce ne sont que de mots en français avec des verbes conjugués (2,8 Mo).

    Si ton fichier est en français et de même type avec des verbes conjugués, peux-tu m'en faire un fichier texte et me le passer (en dispo sur un site par FTP), environ 4 Mo je pense, tu as mes coordonnées dans mon profile.

    Sinon, pour ta question, pour ma part ça va vite, mais je l'exploite en fichier texte classé alphabétiquement, le classement par lettre en lisBox qui trie (sorted = true) par lettre est réalisable, suffit de faire une routine et de la faire tourner la nuit, et ensuite, sauf si tu rajoutes des mots, suffit de faire un passage dans le fichier et de noter la ligne de chaque lettre, après tu ne fais que de l'avance sans test du mot tant que tu n'y es pas, ça va déjà beaucoup plus vite.
    Il y a un d'autres trucs peut être faisables (outre de faire 26 fichiers), ce serait d'essayer (si ça marche), de la même façon, de relever la ligne et l'octet de chaque changement de lettre, ensuite dans ton fichier texte tu peux positionner directement sur le bon octet, borner en somme les mots de la lettre désirée, puis ne travailler que sur ce bloc, dans une variable par exemple, si ça l'avale, ou un tableau via Split.

    Bref, pour ma part je fais du fichier texte pour ça, ça permet de maîtrise toutes les façon d'y accéder, ça ne se démode jamais et ça ne plante pas, a contrario des BDD, qui régulièrement plante à chaque évolution de l'OS ou MAJ (souvent)...

    Tu peux me contacter par mail si tu veux, j'aime bien faire ce genre de truc...
    .

  5. #5
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    quelle est ta requête exactement ?
    y a t il un index sur la table ?
    Salut,
    Oui ds acces il y a un index
    la requête ci dessous cherche sur le mot WAGON mais cette partie serait bien sûr une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            'Initialisation de la chaîne de paramètres pour la connexion
            strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Desktop\JeuDeLettres.accdb;"
            'Initialisation de la chaîne contenant l'instruction SQL
            strSql = "SELECT dico.[mot] FROM dico WHERE (((dico.[mot])='WAGON'));"

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    s'il y a un index sur la colonne mot, cette requête devrait être instantanée ... même sous access ...

    sinon en effet la méthode de graffito est très bien, charger les données dans une collection, et là ca sera encore plus instantané que via access

  7. #7
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Bonjour Freddyev,

    J'ai un lexique de 240.000 mots en fichier texte (que j'embarque en ressource dans un programme de mot-croisés, puis que j'efface immédiatement après, afin qu'il ne soit ps pompé), ce ne sont que de mots en français avec des verbes conjugués (2,8 Mo).
    Salut, il s'agit du dictionnaire officiel du scrabble, il était jusqu'il y a peu dispo sur le site http://www.isc.ro/fr/commands/lists.html un jeu de scrabble online où tu joues contre de vrais adversaires avec qui tu peux même tchatter
    Quant au fait qu'il soit pompé, cela ne me pose pas de blèmes, cela pourrait juste faire des émules pour la bonne pratique de la langue française



    Citation Envoyé par Ehjoe Voir le message
    Si ton fichier est en français et de même type avec des verbes conjugués, peux-tu m'en faire un fichier texte et me le passer (en dispo sur un site par FTP), environ 4 Mo je pense, tu as mes coordonnées dans mon profile.
    Ok je te fais ça mais sache qu'il n'y a que des mots en majuscules donc pas d'accentuation mais il contient ttes les conjuguaisons

    Citation Envoyé par Ehjoe Voir le message
    Sinon, pour ta question, pour ma part ça va vite, mais je l'exploite en fichier texte classé alphabétiquement, le classement par lettre en lisBox qui trie (sorted = true) par lettre est réalisable, suffit de faire une routine et de la faire tourner la nuit, et ensuite, sauf si tu rajoutes des mots, suffit de faire un passage dans le fichier et de noter la ligne de chaque lettre, après tu ne fais que de l'avance sans test du mot tant que tu n'y es pas, ça va déjà beaucoup plus vite.
    Il y a un d'autres trucs peut être faisables (outre de faire 26 fichiers), ce serait d'essayer (si ça marche), de la même façon, de relever la ligne et l'octet de chaque changement de lettre, ensuite dans ton fichier texte tu peux positionner directement sur le bon octet, borner en somme les mots de la lettre désirée, puis ne travailler que sur ce bloc, dans une variable par exemple, si ça l'avale, ou un tableau via Split.

    Bref, pour ma part je fais du fichier texte pour ça, ça permet de maîtrise toutes les façon d'y accéder, ça ne se démode jamais et ça ne plante pas, a contrario des BDD, qui régulièrement plante à chaque évolution de l'OS ou MAJ (souvent)...

    Tu peux me contacter par mail si tu veux, j'aime bien faire ce genre de truc...
    .
    Je n'y manquerai pas, mon but est de développer un jeu de mots avec interface adaptée aux malvoyants, aveugles et voyants.

  8. #8
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Je chargerai l'ensemble de la table en mémoire au début du jeu et je construirai un Dictionnary<string,bool> avec tous les mots.

    Le chargement devrait prendre de l'ordre de 2 secondes et la vérification via un ContainsKey d'un mot sera très rapide.


    Si l'implémentation des collections est bien faite en .net, le plus performant serait :
    • de transférer les mots de la DataTable vers une List<string> temporaire,
    • de remplir une SortedList<string> de recherche avec un AddRange de la list temporaire,
    • de faire la recherche via un IndexOf sur la SortedList.
    Merci, je bosse sur cette idée

  9. #9
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par freddyev Voir le message
    [COLOR="Red"]Salut, il s'agit du dictionnaire officiel du scrabble.
    Bonjour Freddy,

    J'ai fait une belot pour aveugle, tiré de ma belote normale, mais celle pour aveugle parle, personne ne la télécharge, même pas gratuitement ?

    Si c'est en majusciles, non merci, il me faut les accents.

    Ben mes fichiers je ne voulais pas qu'ils soient pompés par "tout le monde" car j'avais dû écrire les définitions une à une, un travail de romain.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Bref, pour ma part je fais du fichier texte pour ça, ça permet de maîtrise toutes les façon d'y accéder, ça ne se démode jamais et ça ne plante pas, a contrario des BDD, qui régulièrement plante à chaque évolution de l'OS ou MAJ (souvent)...
    lol
    une vraie base de données ne plante pas, et access n'est pas une vraie base de données ...

  11. #11
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    lol
    une vraie base de données ne plante pas, et access n'est pas une vraie base de données ...
    Bonjour,

    Evidemment que ça plante, tu ne vois quasiment jamais de BDD dans un logiciel, s'est généralement utilisé en milieu professionnel car il y a toujours quelqu'un pour la dépanner.

    Hélas si ça plante, par manque de DLL, par MAJ qui change une version dont la base se sert, par changement d'OS, c'est rattrapable mais faut lui apporter ce qui lui manque, que dire des sites qui plantent (pas toujours à cause des BDD), et pour ten convaincre, en dernier, alors que la BDD fait disons 5% du codage d'un programme, vois les questions dans les forums qui parfois avoisinent les 35% sur les BDD.

    Ça ne va pas plus vite qu'un fichier texte qui gère en séquentiel indexé ou en multicritères au pointeur, c'est 10 fois plus gros et 10 fois moins souple, à part ça, c'est une question de goûts...

    Le seul endroit où on peut y échapper c'est sur les sites "non" propriétaires.

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Bonjour,

    Evidemment que ça plante, tu ne vois quasiment jamais de BDD dans un logiciel, s'est généralement utilisé en milieu professionnel car il y a toujours quelqu'un pour la dépanner.

    Hélas si ça plante, par manque de DLL, par MAJ qui change une version dont la base se sert, par changement d'OS, c'est rattrapable mais faut lui apporter ce qui lui manque, que dire des sites qui plantent (pas toujours à cause des BDD), et pour ten convaincre, en dernier, alors que la BDD fait disons 5% du codage d'un programme, vois les questions dans les forums qui parfois avoisinent les 35% sur les BDD.

    Ça ne va pas plus vite qu'un fichier texte qui gère en séquentiel indexé ou en multicritères au pointeur, c'est 10 fois plus gros et 10 fois moins souple, à part ça, c'est une question de goûts...

    Le seul endroit où on peut y échapper c'est sur les sites "non" propriétaires.
    Qu'est ce qu'il faut pas lire ici
    Dans 99% des cas, une base de données est plus efficace qu'un fichier plat...
    Ben oui, ca gère l'intégrité, les relations, les contraintes, les index, etc.
    Alors effectivement, Access est un cas un peu à part. Ca n'est, à mon sens pas un vrai moteur de SGBD. Mais un moteur embarqué comme SQL Server Compact ou SQLite est très efficace.
    Le coup de l'indicateur du forum, c'est très moyen, faut voir le niveau technique de ceux qui posent les questions aussi! Bien souvent, c'est des bidouilleurs de VBA ou VB6 qui ne savent pas utiliser un DataReader et pas de vrais développeurs.

    C'est pas parceque tu ne sais pas piloter un avion que c'est moins efficace qu'une voiture pour faire un Paris/New-York!

  13. #13
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Je chargerai l'ensemble de la table en mémoire au début du jeu et je construirai un Dictionnary<string,bool> avec tous les mots.

    Le chargement devrait prendre de l'ordre de 2 secondes et la vérification via un ContainsKey d'un mot sera très rapide.


    Si l'implémentation des collections est bien faite en .net, le plus performant serait :
    • de transférer les mots de la DataTable vers une List<string> temporaire,
    • de remplir une SortedList<string> de recherche avec un AddRange de la list temporaire,
    • de faire la recherche via un IndexOf sur la SortedList.
    Graffito,
    Je comprends bien le principe et me suis documenté sur la méthode mais on donne tjrs des exemples avec des truc du style dico.Add("txt", "notepad.exe"), je ne vois pas comment charger ma table ds le dictionnaire.

    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
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'TODO: cette ligne de code charge les données dans la table 'JeuDeLettresDataSet.dico'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            ' Me.DicoTableAdapter.Fill(Me.JeuDeLettresDataSet.dico)
            Connexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= D:\Admin\Mes sources de données\JeuDeLettres.accdb"
            connexionOLE = New OleDbConnection()
            connexionOLE.ConnectionString = Connexion
            connexionOLE.Open()
            DicoTableAdapter = New OleDbDataAdapter("SELECT dico.mot FROM(dico);", connexionOLE)
            ds = New DataSet()
            Dim dicoMots As New Dictionary(Of String, String)
     
    ' la je cale, je ne vois pas ce que je dois mettre comme instruction pour ajouter le contenu du dico
     
            dicoMots.add(
     
            Panel2.Visible = True
            TableLayoutPanel1.Visible = True
            RadioButton1.Checked = True
            TypeInterface = "GrdCaracteres"
        End Sub

  14. #14
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut Natanahed
    Citation Envoyé par Nathanael Marchand Voir le message
    Qu'est ce qu'il faut pas lire ici
    Cher rédacteur,

    Je reste un inconditionnel des fichiers txt, car depuis le CPM un fichier texte fonctionne encore, ce qui n'est pas le cas d'une BDD qui ne fait rien de plus d'ailleurs (on peut aussi indexer et faire du multicritères en txt), on peut même si mes souvenirs sont bon du C, à condition que les données soient formatés, y aller directement par adressage sur dique dans les bloc qui composent le fichier, une BDD c'est exactement ça au mieux et si elle est bien gérée.

    La BDD c'est surtout plus pratique et plus rapide si les éléments (clefs et datas) ne sont pas trop complexes, ça permet de gagner du temps car ça peut se lier rapidement à d'autres application prévues à cet effet, mais au niveau sécurité ça dépend de trop de choses pour être stable plusieurs lustre sans planter, à un moment donné il lui manque un programme, ou un programme n'est pas à jour.

    L'avantage du texte est aussi qu'il est plus simple à mettre au point car on voit ce qui se passe, plus simple aussi à modifier manuellement, à lire directement, il y a d'anciens programmeurs qui préfèrent le fichier txt, le roi des fichiers.

    Et donc si c'est un particulier avec un logiciel, il ne peut plus s'en servir, par contre en entreprise en effet ce n'est pas un problème, celui qui gère en 10 minute rajoute ou met à jour ce qui ne va pas, de facto je dirais que la BDD est à exclure des logiciels indépendants pour particuliers (sauf à vouloir faire du SAV)...

  15. #15
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    je ne vois pas comment charger ma table ds le dictionnaire.
    En C#, on aurait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DicoTableAdapter.Fill(ds) ;
    for (int i=0;i<ds.Tables[0].Rows.Count;i++)
       dicoMots.Add(ds.Tables[0].Rows[i][0].Add,"") ;

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Citation Envoyé par Ehjoe Voir le message
    Evidemment que ça plante, tu ne vois quasiment jamais de BDD dans un logiciel, s'est généralement utilisé en milieu professionnel car il y a toujours quelqu'un pour la dépanner.
    lol
    non je t'assure, on a des bases de données qui tourne non stop sur du process où les usines ne doivent pas s'arrêter et la base de données ne plante jamais, personne n'intervient dessus ...
    un fichier ne permet par défaut rien à part le stockage des données, par contre je veux bien croire que c'est bien pour stocker une dizaine de Mo de données non critiques

  17. #17
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Freddy, si tu souhaites faire du VB.Net tant mieux pour toi! Je disais simplement que ca n'était pas parce que sur le forum il y avait beaucoup de personnes qui ne savent pas maitriser les bases de données qu'il fallait considérer cette solution comme non viable!
    Concernant ton sujet, ne faisant pas de VB, je peux essayer de te donner quelque chose mais je garantis pas que ca compile du premier coup! Le principe est néanmois correct

    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
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'TODO: cette ligne de code charge les données dans la table 'JeuDeLettresDataSet.dico'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            ' Me.DicoTableAdapter.Fill(Me.JeuDeLettresDataSet.dico)
            Dim listeMots As New List(Of String)
            Connexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= D:\Admin\Mes sources de données\JeuDeLettres.accdb"
            Using connexionOLE As New OleDbConnection(Connexion)
                Dim command As New OleDbCommand("SELECT dico.mot FROM(dico);", connexionOLE)
                connexionOLE.Open()
                Dim reader As OleDbDataReader = command.ExecuteReader()
                While reader.Read()
                    listeMots.Add(reader(0).ToString())
                End While
                reader.Close()
                connexionOLE.Close()
            End Using
            Panel2.Visible = True
            TableLayoutPanel1.Visible = True
            RadioButton1.Checked = True
            TypeInterface = "GrdCaracteres"
    End Sub
    A noter plusieurs choses, l'utilisation d'un dataset est inutile. Par contre il faut a tout prix, utiliser un Using avec ton OleDbConnection! En effet, c'est un objet qui doit etre disposé après son utilisation.

    Edit: cela dit, avec ce code, listeMots n'existe qu'a l'interieur de la fonction! Il faut qu'il soit un membre de ta classe Form1 plutot.

    Tu peux ensuite récuperer si un des mots de la liste commence par ce qu'a entré l'utilisateur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim estDansLaListe As Boolean = listeMots.Any(Function(mot) mot.StartsWith(saisieUtilisateur))

  18. #18
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2011
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Tu peux ensuite récuperer si un des mots de la liste commence par ce qu'a entré l'utilisateur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim estDansLaListe As Boolean = listeMots.Any(Function(mot) mot.StartsWith(saisieUtilisateur))
    Merci pour ta réponse et ton aide, je butte sur cette dernière instruction mais il se fait tard, je reprendrai demain matin, la nuit porte conseil.

    A+

  19. #19
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Elle ne marche que si tu utilises le framework .NET 3.5 (ou 4) car c'est du LinqToObjects
    http://msdn.microsoft.com/fr-fr/library/bb534972.aspx

  20. #20
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Je viens peut être troller un peu sur les base de donnée txt chez les particuliers mais...

    Vous en connaissez beaucoup des particuliers qui utilisent encore MSDOS 6 sur leur écran cathodique?

    Moi non, dans le milieu pro je ne dis pas par contre. Mais dans ce cas il y a d'autre pro qui s'arrange pour que le truc tourne toujours (comme dis précédement).

    Chercher de la pérennité pour une application grand public est une aberration (je parlerai pas du fait de croire que son oeuvre va perdurer vers l'infini sans planter ou évoluer après s'être fait ramasser par une bagnole...).

Discussions similaires

  1. [AJAX] Aide à la recherche sur une liste <select>
    Par lthibert dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/06/2007, 13h00
  2. Recherche sur une table
    Par deutschy dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/06/2007, 10h32
  3. recherche sur une chaîne de caractères
    Par bogsy15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 12h01
  4. Réponses: 4
    Dernier message: 26/05/2006, 14h30
  5. Recherche sur une page web
    Par Itori dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2005, 13h32

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