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 :

Une Recherche sur deux champs


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut Une Recherche sur deux champs
    Bonjour à tous, voilà je voudrais me positionner sur un enregistrement précis d'une table pour pouvoir y éditer des modifications le concernant...!!!
    Mon problème est que cette Table : DETAIL.DB (Paradox) dipose une clé composée (N_Ctr+N_Item) et je ne sais pas comment me positionner sur un enregistrement X par rapport à la valeur de 02 champs: N_Ctr et le N_Item

    Merci++++++

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Tu peux utiliser la fonction Locate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Table1.Locate('N_Ctr;N_Item', varArrayOf(['V1', 'V2']), [loCaseInsensitive]) then
      // ... trouvé !
    Si une occurrence est trouvée Locate renvoie True et se positionne sur l'enregistrement.

    @+ Claudius

  3. #3
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Tu peux utiliser la fonction Locate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Table1.Locate('N_Ctr;N_Item', varArrayOf(['V1', 'V2']), [loCaseInsensitive]) then
      // ... trouvé !
    Si une occurrence est trouvée Locate renvoie True et se positionne sur l'enregistrement.

    @+ Claudius
    Merci ça marche à merveille, je connaissais le LOCATE mais pour un seul champs, je suis agréablement renseignée...

    Merci encore

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    attention quant à l'utilisation de Locate avec des tables volumineuses car c'est une méthode de récherche séquentielle.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Salut;

    attention quant à l'utilisation de Locate avec des tables volumineuses car c'est une méthode de récherche séquentielle.
    Salut,
    et qu'as tu à proposer ??? en échange???

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    les filtres sont une bonne alternative et le Select du SQL l'est aussi très puissant en plus et ne demande pas d'index sur les champs faisant partie de la recherche.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #7
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Re;

    les filtres sont une bonne alternative et le Select du SQL l'est aussi très puissant en plus et ne demande pas d'index sur les champs faisant partie de la recherche.

    en fait, c'est une recherche qui a pour but de trouver un enregistrement pour procéder à des modifs automatiques lors de l'insertino d'un autre enregistrement dans une autre table, les 02 enregistrements en question ont la même référence!!! donc l'instruction : If Locate tombe à pic pour l'insérer dans mon code de modification!!
    Tu vois un peu???

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    procedure TNouvLiv.suiButton1Click(Sender: TObject);
    var
    Addition, Soustraction:Integer;
     begin
     If EditQte.text<>'' then
     Begin
     DataModule2.TablLivraison.append;
     Datamodule2.TablLivraison.FieldValues['Date_Livraison']:=DatePick.Date;
     Datamodule2.TablLivraison.FieldValues['Ref_Interne']:=DBEditRef.Text;
     Datamodule2.TablLivraison.FieldValues['Designation']:=DBEditDes.Text;
     Datamodule2.TablLivraison.FieldValues['Qte_Livree']:=EditQte.Text;
     Datamodule2.TablLivraison.FieldValues['Fournisseur']:=EditFrs.Text;
     Datamodule2.TablLivraison.FieldValues['Code_Ctr']:=EditCtr.Text;
     Try
     DataModule2.TablLivraison.Post;
     
     DataModule2.TabArticle.Edit;
     Addition:=DataModule2.TabArticleQte_Stock.Value+StrToInt(EditQte.Text);
     DataModule2.TabArticle.FieldValues['Qte_Stock']:=Addition;
     DataModule2.TabArticle.Post;
     if DataModule2.TabDetail.Locate('N_Ctr;Ref_Interne', varArrayOf([EditCtr.Text, DBEditRef.Text]), [loCaseInsensitive]) then
       begin
        DataModule2.TabDetail.Edit;
        Soustraction:=DataModule2.TabDetailQte.Value-StrToInt(EditQte.Text);
        DataModule2.TabDetail.FieldValues['Qte_Restante']:=Soustraction;
        DataModule2.TabDetail.Post;
       end;
     
     effacementedit;
     NouvLiv.Close;
     Except
      MessageBox(Handle, pchar('Attention, vous avez tenté d''insérer une livraison déja existante dans la base, Vérifier la référence interne ou la date à saisir') , pchar('Insertion d''une nouvelle livraison'), 48);
      Datamodule2.TablLivraison.Cancel;
      effacementedit;
      end;
     end
     Else
     MessageBox(handle,'Saisissez la Quantité Livrée avant la validation','Avertissement',48)
    end;
    c'est une procédure d'insertion de nouvelles livraisons en même temps des changement doivet affecter une autre table

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Ok et tant mieux pour toi mais je pense toujours que SQL peut être une bonne alternative au ca où tes champs ne sont pas indexés.

    Seul le résultat compte pour le moment mais pour une optimisation du code faut peut être y réfléchir.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  9. #9
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Ok et tant mieux pour toi mais je pense toujours que SQL peut être une bonne alternative au ca où tes champs ne sont pas indexés.

    Seul le résultat compte pour le moment mais pour une optimisation du code faut peut être y réfléchir.

    Oui pour l'optimisation c'est un bon point tu as raison de le préciser, de toute façon je vais essayer de le faire via SQL, on verra bien si ça marche!!!!

    Merci+++++

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

Discussions similaires

  1. Occurence d'une valeur sur deux champs de la même table
    Par arihane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/02/2015, 21h30
  2. peut on filtrer une table sur deux champs
    Par lila23 dans le forum Débuter
    Réponses: 3
    Dernier message: 20/04/2009, 18h48
  3. [Oracle] jointures avec une somme sur deux champs
    Par guggus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/10/2006, 18h06
  4. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 16h06
  5. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 19h26

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