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

Access Discussion :

Problème de requête


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 68
    Points : 43
    Points
    43
    Par défaut Problème de requête
    Salut,

    J'ai un problème tout bète, et vu que les DB c'est pas mon fort, je trouve pas ce que je fait mal lol.

    J'ai un champ dans une table qui peut contenir de 0 à X nom de personnes séparés par des ';'. Lorsque que je veux trouver les enregistrements ou ce champ contient le nom d'une personne rechercher, j'essaye de faire bètement :

    WHERE name LIKE '%nom_personne%'

    Mais ca ne marche pas, ca ne trouve aucun champ. Quelqu'un pourrais t'il m'aiguiller ?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour
    Oups.....

    Généralement dans un champ (sauf cas particulier), celui-ci contient une seule information.

    Dans ton cas, tu as dans un même champ le nom de plusieurs personnes (avec peut-être des doublons) et tu veux en fait extraire de tout cela un nom particulier.
    Quand tu fais une recherche sur ce champ, Access n'est pas censé savoir que tes point-virgules correspondent a des séparations.

    Donc crée une table avec tes différents noms dans des enregistrements différents (tu peut très bien le faire à l'aide d'un fichier texte, de la forme "DUPONT;DURAND;MARTIN................".
    Pour cela dans TABLES : Clic droit (Importer); tu sélectionne ton fichier texte (TXT) et tu n'as plus qu'a suivre les instructions

    En espérant t'aider.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    met des etoiles a la place des %
    sinon oui j'espere avoir mal compris car le principe de la base de donnée est d'identifier chaque champs par des infos unique ou du moins distinctes la si tu mets tous les noms a la suite ca va pas etre terrible en plus ta recherche risque d'etre longue

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    Merci je vais essayer avec les *, mais sinon il n'y a aucun risque de doublon, c en faite une base de donnée access servant a un programme en C#, le contenu est gérer par le programme, donc aucun risque de doublon.

    Et surtout ce n'est pas ce que vous avez compris lol, c'est plutot le principe d'une table film, et pour chaque film une série d'informations, dont le casting. et pour chaque film il n'y a qu'un champ casting dans lequel il y a les noms des acteurs principaux.

  5. #5
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Donc si j'ai bien compris cette fois, tu as donc une table contenant un champ qui comporte différents noms d'acteur séparés par un point-virgule.

    Et tu veux rechercher un nom particulier qui ne sera jamais un doublon dans cette chaine de caractères.

    Alors sauf erreur de ma part, je pense que tu devrais t'interreser à la fonction SPLIT.
    Voici un extrait du dicticiel sur les chaines de caractères fait par Sébastien Curutchet à cette adresse http://drq.developpez.com/vb/tutoriels/String/

    6. Découper une chaîne de caractères :
    Il arrive que vous deviez traiter une ligne d'un fichier ou autre source de données, en la découpant en fonction d'un séparateur. Une fonction VB vous permet de faire cela : Split. Cette fonction s'utilise de la manière suivante : monTab = Split(maChaine,monSéparateur).

    Comme vous pouvez le voir, la fonction Split retroune un tableau (de base 0) qui contient dans chaque case les différents champs de votre châine.

    Un petit exemple pour eclaicir tout ça :


    Dim monTab() As String

    monTab = Split (Champ1@@@Champ2@@@Champ","@@@")

    Comme résultat vous obtiendrez un tableau à 3 cases (de 0 à 2) avec monTab(0) = "Champ1", monTab(1)="Champ2", monTab(2)="Champ3". Le séparateur peut être aussi long que vous le souhaitez.
    ATTENTION pour ceux qui auraient déjà utilisé strtok en C : la chaîne indiquant le séparateur est elle même le séparateur. Si vous faîtes Split("Bonjour. Salut; Ca va,",".;,") vous n'obtiendrez pas "Bonjour", " Salut", "Ca va" car le séparateur est la chaîne ".;,".

    Split retournant un tableau est lui même un tableau. Donc pour récupérer le premier élément vous pouvez écrire Split(maChaine,monSep)(0), pour récupérer le n-ième élément vous faîtes Split(maChaine,monSep)(n-1), et pour récupérer le dernier élément vous faites Split(maChaine,monSep)(UBound(Split(maChaine,monSep)))
    Ceci est un début de piste et je pense que des gens plus compétents que moi pourront mieux te guider pour la suite.
    Bonne continuation

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 68
    Points : 43
    Points
    43
    Par défaut
    Merci, pour splitter la chaine en tableau ca je savais, mon problème etait juste dans une requête. Avec les * au lieu des % ca marche quand je le fait en SQL directement dans Access, mais pas quand je le fait sous C#. Enfin pour ce qui concerne ce forum (la requête) c'est résolu, merci bien

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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