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

Bases de données Delphi Discussion :

[ADO][TADOTABLE] Filter et Locate


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [ADO][TADOTABLE] Filter et Locate
    Bonjour,

    Soit une table T sous MS-ACCESS contenant 3 champs :
    - une clé primaire ID1
    - une clé secondaire ID2
    - un champs texte VAL

    Et 4 enregistrements dans cette table :
    (1,1,'a') (2,1,'b') (3,2,'a') (4,2,'b')

    Un composant TADOTable MonADOTable est connecté à cette table et applique un filtre ID2 = 2.

    L'opération MonADOTable.Locate ('VAL', 'b', [loCaseInsensitive]) réussit (Result = True) mais me déplace mon curseur sur le troisième enregistrement et non le quatrième.

    Inituitivement je ne parviens pas à comprendre ce comportement.

    NOTA : je contrôle le déplacement du curseur par :

    showmessage(IntToStr(MonADOTable.RecNo))

    et

    showmessage(MonADOTable.FieldByName('VAL').AsString)


    En espérant avoir été suffisament clair dans la description de mon problème

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 49
    Points : 36
    Points
    36
    Par défaut
    Salut,
    A tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonADOTable.Locate('ID2;VAL',VarArrayOf(['2','b']),[loCaseInsensitive]);
    @+

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Peut être parce que RecNo commence à 0 au lieu de 1 donc tu as un décalage de 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RecNo --- ID1 --- ID2 --- VAL
    0     --- 1   --- 1   --- a
    1     --- 2   --- 1   --- b
    2     --- 3   --- 2   --- a
    3     --- 4   --- 2   --- b

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Oui mais
    Citation Envoyé par Nathan
    Salut,
    A tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonADOTable.Locate('ID2;VAL',VarArrayOf(['2','b']),[loCaseInsensitive]);
    @+
    Effectivement, cela fonctionne bien mais je ne saisis pas la nécessité de préciser ID2 dans la mesure où la table est déjà filtrée selon ce paramètre.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Non
    Citation Envoyé par Malatar
    Peut être parce que RecNo commence à 0 au lieu de 1 donc tu as un décalage de 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RecNo --- ID1 --- ID2 --- VAL
    0     --- 1   --- 1   --- a
    1     --- 2   --- 1   --- b
    2     --- 3   --- 2   --- a
    3     --- 4   --- 2   --- b
    Quel que soit le nombre d'enregistrements mon opération Locate me conduit toujours à RecNo = 1

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Parce que ta table est filtrée, tu n'as plus que 2 enregistrements :

    Table avec filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RecNo --- ID1 --- ID2 --- VAL
    0     --- 3   --- 2   --- a
    1     --- 4   --- 2   --- b

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 49
    Points : 36
    Points
    36
    Par défaut
    En fait je te dit ca parce que a mon avis c'est plus propre d'utiliser une seule des deux options (Filter ou Locate).
    Ma préférée est Locate.
    A toi de voir.
    @+

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Re-non
    Citation Envoyé par Malatar
    Parce que ta table est filtrée, tu n'as plus que 2 enregistrements :

    Table avec filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RecNo --- ID1 --- ID2 --- VAL
    0     --- 3   --- 2   --- a
    1     --- 4   --- 2   --- b
    Non, parce que même si j'ai après filtrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RecNo --- ID1 --- ID2 --- VAL
    0     --- 3   --- 2   --- a
    1     --- 4   --- 2   --- b
    1     --- 4   --- 2   --- c
    1     --- 4   --- 2   --- d
    [/quote]

    un Locate a, b , c ou d me renvoie toujours sur RecNo = 1 ie a
    C'est à n'y rien comprendre.

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Quel version de delphi tu as ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut CCL : "Locate" ne prend pas en compte "Filter"
    En résumé, dans le cas suivant :

    ID1 - ID2 - Valeur
    1 - 1 - a
    2 - 1 - b
    3 - 2 - a
    4 - 2 - b

    Filter := 'ID2 = 2';
    Locate(Valeur, 'b', [loCaseInsensitive]);

    Cette instruction localise la première occurence 'b' du jeu d'enregistrements global (quel que soit le filtrage appliqué).
    Dans ce cas, elle trouve l"enregistrement ID1 = 2, elle essaye de déplacer le curseur sur lui.
    Ce dernier ne faisant pas partie du jeu des données filtrées, l'opération échoue.

    Au contraire, avec le jeu :

    ID1 - ID2 - Valeur
    1 - 1 - a
    2 - 1 - a
    3 - 2 - a
    4 - 2 - b

    L'instruction Locate fonctionne correctement.

    Etrange comportement n'est ce pas ?

    Ne puis-je pas imposer un filtrage lors de l'opération Locate ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Malatar
    Quel version de delphi tu as ?
    Borland Visual Studio 9.0.1761.24408

    Rq : tu as raison de me demander ma version car je viens de tomber sur un forum de discussion évoquant ce problème sur le composant dbGo en 2001, mais j'imagine que le problème a du être résolu depuis.

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Je crois que les composants AdoTable de D2005 sont bugs (j'ai D2005 mais j'utilise jamais de AdoTable)

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

Discussions similaires

  1. Table ADO et la fonction Locate
    Par bilal_ini dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2008, 13h51
  2. [ADO][TADOTable][Delphi7][MS-SQL]erreur valeur nul
    Par napz dans le forum Bases de données
    Réponses: 8
    Dernier message: 05/05/2007, 12h01
  3. [D7][ADO] TAdoTable plante sur un PC et pas l'autre
    Par EMC51 dans le forum Bases de données
    Réponses: 7
    Dernier message: 19/03/2007, 17h56
  4. Locate ou Filter (Le plus rapide ?)
    Par dd16 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/09/2005, 09h16
  5. [Merci] [ADO] Options de Locate dans une BD Access
    Par Jilam dans le forum Bases de données
    Réponses: 4
    Dernier message: 11/11/2004, 11h52

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