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 :

Problème de recherche des enregistrements


Sujet :

Bases de données Delphi

  1. #1
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut Problème de recherche des enregistrements
    Salut tout le monde,
    Je recherche l'instruction pour faire une recherche sur ma base de données sur sql server à partir de delphi avec le composant db query
    et l'afficher dans le résultat sur la fenêtre ( chaque champ dans son dbedit) comme dbnavigateur
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
    i:integer
    begin
    i:=0;
    i:=Nomdelaforme.dbedit1.text;
    nomdelaforme.nomdelatable.first;
    while not nomdelatable.eof do
    begin
    if nomdelaforme.nomdelatable['nomdechamp']=i then begin
    showmessage('xxxxx');
    nomdelatable.edit;
    end;end;end;
    mais n'affiche pas donc je recherche l'aide

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 945
    Billets dans le blog
    6
    Par défaut
    Il y a ici sûrement confusion de type : si i est entier, on ne peut lui affecter la valeur Text d'un DBEdit, de type chaîne.

    Il faut probablement utiliser les fonctions de conversion StrToInt ou IntToStr.

    On doit aussi pouvoir utiliser des transtypages de champs : if nomdelaforme.nomdelatable['nomdechamp'].AsInteger=i then
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    le code est confus , mais je pense qu'il a été écrit 'à la volée' .

    Outre l'erreur relever par tourlourou a propos de i , je note une possible confusion dans le "while not nomdelatable.eof do"
    si Nomdelaforme est dans une autre unité alors l'indication manque , sinon à quoi cela sert-il de l'indiquer ailleurs .

    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
     
    var i : Integer;
    begin
    with NomdelaForme do 
     begin
       i:=StrToInt(dbedit1.text);
       nomdelatable.first;
       while not nomdelatable.eof do
        begin
           if nomdelatable['nomdechamp'].asInteger=i then 
                begin
                    showmessage('xxxxx');
                    nomdelatable.edit;
                end;
           nomdelatable.Next; // ça aussi , ça manque la boucle while serait infinie et si le 1°record ne correspond pas à la condition ....... pas de showmessage  
        end;
      end;
    end;
    Ensuite , si c'est une query qui est utilisée , pourquoi ne pas utiliser un paramètre pour n'avoir que l'ensemble de données à éditer ? ce qui éviterait d'avoir a faire un test de valeur
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM TABLE WHERE CHAMPI=:I;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    With nomdelatable do
     begin
       Close;
       ParambyName('i').asInteger:=StrToInt(dbedit1.text); // note , si c'est un DBEdit il vaudrait carrément mieux passé par la data source 
       nomdelatable.Open;
       while not EOF do
         begin
          .....
          Next;
        end;
     end;
    je vois encore plein d'améliorations possibles , mais à demande floue , réponse floue ! (le bon vieux GIGO informatique est toujours vivant)

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    + voir TTable.Locate,
    mais dans les bases relationnels, comme FB, SQlserver,.. mieux utiliser les requêtes comme expliquer par SergioMaster

  5. #5
    Membre extrêmement actif Avatar de Simara1170
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2014
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 423
    Par défaut
    TU peux tenter le FindKey, mais je te conseille de te faire couler une bonne cafetière de café, parce que t'auras eu le temps de la boire le temps qu'il renvoie un résultat...
    Le mieux ça reste quand même, à mon avis, de se faire une petite requête SQL qui te renverras le résultat voulu avec un temps d’exécution moindre

  6. #6
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    Citation Envoyé par Simara1170 Voir le message
    TU peux tenter le FindKey, mais je te conseille de te faire couler une bonne cafetière de café, parce que t'auras eu le temps de la boire le temps qu'il renvoie un résultat...
    Le mieux ça reste quand même, à mon avis, de se faire une petite requête SQL qui te renverras le résultat voulu avec un temps d’exécution moindre
    bonjour simara1170
    je voix que je suis mal exprimer, mon problème c'est comme afficher les résultat dans les dbedit .
    je cherche comment faire des modification après une recherche directement ,j'ai une solution mais ce n'est pas quoi je recherche
    c'est de faire une recherche avec une requête qui va afficher sur un dbgrid après tu clique sur le résultat automatiquement ça va afficher sur les dbedit
    j’espère que la tous le monde va comprendre mon problème....je suis toujours a la recherche d'une solution

  7. #7
    Membre extrêmement actif Avatar de Simara1170
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2014
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 423
    Par défaut
    Tu souhaites en fait pouvoir modifier directement dans ton DBgrid, les valeurs affichées?
    Pour faire ça, faut gratter sur les propriétés des champs de la requête qui aliment la dbgrid, et sur les propriétés de la dbgrid. Je serais pas te dire plus en détail, car on a préféré opter pour un composant payant plus facile d'utilisation, et surtout beaucoup plus puissant (en terme de fonctionnalités) que les DBxxx de base.

    Je ne connais plus le nom exact du package, mais dans l'IDE, ça sort sous le nom de TwwDBgrid. Ca coûte 200$ je crois.
    Tu pourras le faire avec les DBgrid de base, mais c'est fastidieux à configurer, et surtout, ça peut avoir des comportements bizarres...

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    mon problème c'est comme afficher les résultat dans les dbedit
    Que venait donc faire alors une boucle dans le code ?
    Pour faire ça, faut gratter sur les propriétés des champs de la requête qui aliment la dbgrid, et sur les propriétés de la dbgrid. Je serais pas te dire plus en détail, car on a préféré opter pour un composant payant plus facile d'utilisation, et surtout beaucoup plus puissant (en terme de fonctionnalités) que les DBxxx de base.
    un dbgrid suffit pour faire l'affichage , et comme l'enregistrement en cours est l'enregistrement sélectionné dans la grille , il est facile de mettre des Controles de données , le plus difficile restant de gérer la modification (par exemple avec des UpdateSQL ou encore avec un ensemble en CacheUpdates).

    Mais encore une fois , je répète : le problème est mal exposé
    - aucune version de delphi
    - aucune indication quant à la fameuse Query (même pas le type de composant utilisé)
    - aucune description des tables impliquées ni de leur relation

    on peut toujours exposer n'importe quelle solution au gré de nos fantaisies cela ne te feras pas avancer

  9. #9
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,



    Mais encore une fois , je répète : le problème est mal exposé
    - aucune version de delphi
    - aucune indication quant à la fameuse Query (même pas le type de composant utilisé)
    - aucune description des tables impliquées ni de leur relation

    on peut toujours exposer n'importe quelle solution au gré de nos fantaisies cela ne te feras pas avancer
    Bonsoir
    Merci à vous
    Je utiliser delphi XE3 et comme SGBD SQL Server 2008r
    Les composant utiliser son ADOquery, ADO table,
    Je sais bien que dans dbgrid s'affiche. Pour l'instant c’est la seule méthode que j’ai, car il va afficher après je clique sur cet enregistrement pour que elle va afficher dans mes dbedit .
    Et moi je recherche comment elle s’affiche directement dans mes dbedit
    Exemple :
    N° : (composant dbedit1)
    Nom : (composant dbedit2)
    Prénom : (composant dbedit3)

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Je ne vois rien là que quelque chose de basique , n'ayant rien à voir avec le code de départ fourni .

    Je verrais par exemple la chose suivante :
    un TPageControl avec 2 TabSheets (Panneaux) les 2 onglets pouvant être invisibles
    Dans le premier (Grille) je mettrai la DBGrid
    Dans le second (saisie) les TDBEdits et un Bouton de Validation .
    Au niveau de la DBGrid , l'évènement onDblClick permettrait de passer sur le tabSheet d'édition : PageControl1.ActivePage:=Saisie;
    le bouton de validation permettrait
    1- de modifier l'enregistrement
    2- de repasser sur le Panneau Grille Pagecontrol1.ActivePage:=Grille;

    la dbgrid et les dbedits étant liè au même datasource

  11. #11
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Je ne vois rien là que quelque chose de basique , n'ayant rien à voir avec le code de départ fourni .

    Je verrais par exemple la chose suivante :
    un TPageControl avec 2 TabSheets (Panneaux) les 2 onglets pouvant être invisibles
    Dans le premier (Grille) je mettrai la DBGrid
    Dans le second (saisie) les TDBEdits et un Bouton de Validation .
    Au niveau de la DBGrid , l'évènement onDblClick permettrait de passer sur le tabSheet d'édition : PageControl1.ActivePage:=Saisie;
    le bouton de validation permettrait
    1- de modifier l'enregistrement
    2- de repasser sur le Panneau Grille Pagecontrol1.ActivePage:=Grille;

    la dbgrid et les dbedits étant liè au même datasource
    Salut @SergioMaste
    merci de ton aide c'est très aimable de ta par
    j'ai mal exprimer je veux pas utiliser le composant dbgrid
    ma recherche je doit la faire dans un edit . je saisi un code d'un employer je valide avec un bouton qui va me afficher les donnés de ce employé dans mes dbedit
    c'est pour ça ce code de départ fourni
    merci de vouloirs m'aides .

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    ben il faudrait être un peu plus clair !
    Citation Envoyé par Aujourd'hui, 03h26
    Je sais bien que dans dbgrid s'affiche. Pour l'instant c’est la seule méthode que j’ai, car il va afficher après je clique sur cet enregistrement pour que elle va afficher dans mes dbedit .
    pour faire une recherche , il faut utiliser une simple Query paramètrée
    SELECT * FROM TABLE WHERE CLE=:UNEVALEUR

  13. #13
    Membre éclairé

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Par défaut
    Bonjour

    En utilisant Locate il se positionne sur l’enregistre trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TactNom.Open;
            if  not TActNom.Locate('CODE', Cod, [] )
                  then 
                    begin
                       ShowMessage('ATTENTION'+#10#13+'Code pas TROUVé : '+ Cod);
                       TActNom.Close;
                       Exit;
                   end;

  14. #14
    Membre extrêmement actif Avatar de Simara1170
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2014
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 423
    Par défaut
    Locate, findkey, même combat, ça pédale dans la choucroute...
    Le truc, tu fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * From MaTable Where condition
    et ton DBgrid, tu l'alimentes avec ta query

    Je sais pas comment fonctionne ADO, mais les ibo la syntaxe c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SubstParam(Query, paramètre, valeur)
    et ton paramètre dans la requête seras sous la forme: Tu fait ton champ Tedit avec un bouton valider qui feras globalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Event on click // la flemme de chercher la syntaxe exacte, l'IDE te crée la fonction de toute façon
    begin
       SubstParam(Query, paramètre, valeur)
       DbGrid.Show;
    end;

  15. #15
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut voila j'ai trouver une solution a mon problème
    Bonjour
    Merci a vous
    voila j'ai trouver une solution a mon problème
    j'ai utiliser un composant ADODataSet plus un edit et un bouton qui contient l'instruction suivante
    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
    procedure Txxxxx.Button1Click(Sender: TObject);
    var
    Rech : string;
    result : Boolean;
    begin
     
    Rech := edit1.text;
     
    ADODataSet1.First;
     
    result:= False;
                   while (not ADODataSet1.Eof) do
                                if ADODataSet1.FieldValues['num_dos']=Rech then
                        begin
                                result:= true ; Break;
                        end
                   else 
                             ADODataSet1.Next;
                               if not result then 
                               MessageDlg('Employe n''exisete pas', mtInformation, [mbOK], 0);
    end;
    changer la propriété datasource des dbedit avec la datasource qui est relie au ADOdataset.
    Et pour effectué la modification
    une simple requête sql avec le composant ADOquery
    et en changent la propriété datasource des dbedit avec la datasource qui est relie au ADOtable
    merci a vous
    A++

  16. #16
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par diablo-dz Voir le message
    voila j'ai trouver une solution a mon problème
    Ce serait bien mais la solution proposée est horrible dans un environnement Client/Serveur et est l'archétype de ce qu'il ne faut absolument pas faire !

    Oubliez les réflexes acquis avec Paradox, dbase et consorts !

    Il faut minimiser le volume de données qui doit transiter entre le serveur et le(s) client(s)
    cela surcharge le réseau (tout le monde n'a pas du gigabits !)
    cela surcharge le client (tout le monde n'a pas i7, 16 Go de RAM et un disque SSD rapide !)
    Laissez le serveur faire la recherche dans les tables et vous renvoyer que les lignes pertinentes (s'il y en a)
    Il sera nettement plus efficace que votre recherche locale par code !

    N'oubliez pas que pour un client çà va, pour 10 ça ralentit fortement, et au delà, c'est catastrophique.

    Comme l'a dit SergioMaster, utilisez une requête paramétrée.
    Enfin, le code Delphi n'en sera pas plus important, mais plus compréhensible...

    Je reprends votre procédure et cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Txxxxx.Button1Click(Sender: TObject);
    begin
      if ADOQuery1.Active then
        ADOQuery1.Close;
      // Je suppose que la requête SQL a été initialisé à la conception
      // ADOQuery1.SQL := 'SELECT * FROM EMPLOYE WHERE num_dos = :Numero';
      ADOQuery1.Parameters.ParamValues['Numero'] := edit1.text;
      ADOQuery1.Open;
      if ADOQuery1.RecordCount = 0 then
        MessageDlg('Employe non trouvé', mtInformation, [mbOK], 0);
    end;
    Citation Envoyé par diablo-dz Voir le message
    Et pour effectué la modification
    une simple requête sql avec le composant ADOquery
    Oui ! de même pour une recherche...
    Citation Envoyé par diablo-dz Voir le message
    ... ADOtable
    Non, cela revient à ramener sur le poste client toutes les lignes contenus dans la table sélectionnée et c'est contraire à la règle que j'ai initialement énoncée.
    S'il y a 1 milliards de lignes, le client va se retrouver paralysé. L'utilisateur va arrêter sauvagement son application, des transactions vont restées dans un état suspendu inachevé, à terme c'est la base de données qui sera bloquée, corrompue !!!

  17. #17
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne fais que le code de Ph.B.

    une seule remarque, je ne suis pas trop RecordCount pour le test (quoique dans le cas d'une recherche d'un seul et unique enregistrement cela puisse le faire)
    et préfère faire un test sur la 'nullité' du champ de recherche .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ADOQuery1.FieldByName('num_dos').isNull  then // ou ADOQuery1.Fields[0].isnull ?
        MessageDlg('Employe non trouvé', mtInformation, [mbOK], 0);
    ne connaissant pas très bien ADO et par curiosité , j'ai repris le manuel D7 voici une autre méthode (également visible dans l'aide)

    Citation Envoyé par page 27-21 Récupération d'ensembles de résultats à l'aide de commandes
    ....
    A la différence des composants TADOQuery, qui exécutent différentes méthodes selon qu'elles renvoient ou non un ensemble de résultats, TADOCommand utilise toujours Execute pour exécuter la commande, qu'elle renvoie ou non un ensemble de résultats. Lorsque la commande renvoie un ensemble de résultats, Execute renvoie une interface de l'interface _RecordSet ADO.

    La façon la plus pratique d'utiliser cette interface consiste à l'affecter à la propriété RecordSet d'un ensemble de données ADO.

    Par exemple, le code suivant utilise TADOCommand (ADOCommand1) pour exécuter une requête SELECT, qui renvoie un ensemble de résultats. Cet ensemble de résultats est ensuite affecté à la propriété RecordSet d'un composant TADODataSet (ADODataSet1).

    with ADOCommand1 do begin
    CommandText := 'SELECT Company, State ' +
    'FROM customer ' +
    'WHERE State = :StateParam';
    CommandType := cmdText;
    Parameters.ParamByName('StateParam').Value := 'HI';
    ADODataSet1.Recordset := Execute;
    end;

    Dès que l'ensemble de résultats est affecté à la propriété Recordset d'un ensemble de données ADO, l'ensemble de données est automatiquement activé et les données sont accessibles.
    il suffit alors de tester RecordSet pour savoir si un ensemble de données est accessible

  18. #18
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    une seule remarque, je ne suis pas trop RecordCount pour le test (quoique dans le cas d'une recherche d'un seul et unique enregistrement cela puisse le faire)
    et préfère faire un test sur la 'nullité' du champ de recherche .
    Dans le cas de ADO, RecordCount retourne le nombre total de lignes de l'ensemble de données.
    Mais il est vrai que pour d'autres jeux de composants d'accès aux données, cette valeur n'est correcte qu'après avoir ramené ou parcouru toutes les lignes de l'ensemble de données.
    A manipuler en connaissance de cause donc...

  19. #19
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    bonsoir a vous
    merci
    mais tous ça me dis pas comme il va s'afficher dans mes dbedit
    c'est la seul méthode qui me permettre d'afficher dans mes dbedit , je dis pas quel est bien mais quoi faire ??
    A+

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 707
    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 707
    Billets dans le blog
    65
    Par défaut
    Bonsoir,

    Lier un TDatasource à la Query et lier les DBEdits/DBText (propriétés DataSource et Datafield)

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

Discussions similaires

  1. Recherche des enregistrements du mois précédent
    Par xenos dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/07/2007, 14h14
  2. recherche des enregistrements corréspendant a un champ précis
    Par tina25 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/03/2007, 10h50
  3. Recherche des enregistrements en fonction des paramètres
    Par infoctet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/01/2007, 10h51
  4. [XPath] Problème pour rechercher des caractères spéciaux
    Par JolyLoic dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/12/2006, 14h41
  5. Rechercher des enregistrements similaires
    Par charestm dans le forum Access
    Réponses: 3
    Dernier message: 16/07/2006, 21h04

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