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 :

Requète qui ne donne rien


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 417
    Par défaut Requète qui ne donne rien
    Bonjour,
    j'utilise MySql et j'ai créé une petite procédure pour une recherche dans la table

    d'abord il semble que la requête ne retourne rien et au cas ou j'aurais plusieurs résultats je les charge comment dans mon listbox
    je précise que "num_yvert" est un String ( N° 13A par exemple)
    et je n'ai aucune erreur d'afficher

    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
    procedure TForm1.Panel14Click(Sender: TObject);
    var
    i:integer;
    begin
                cherche:= form1.Edit2.Text;
                form1.Edit1.Text:= cherche;
     
               form1.ListBox1.Visible:= true;
               //i:=form1.ListBox1.ItemIndex;
               form1.ListBox1.Items.Add(cherche);  //simple test ça fonctionne
     
     
            With form1.FDQuery1 do
              begin
                form1.FDQuery1.SQL.Clear;
                form1.FDQuery1.SQL.Add('SELECT * FROM macollec WHERE num_yvert like "%cherche%" ');
                form1.FDquery1.Open();
                resultat:= form1.FDquery1.FieldByName('num_yvert').AsString;
                form1.ListBox1.Items.Add(resultat);
              end;
                     form1.Edit1.Text:= resultat;  //simple test pas de résultat
     
    end;
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 408
    Par défaut
    Bonjour,
    La requête recherche toutes les lignes de la table dont la colonne num_yvert contient la chaîne "recherche".
    Je ne connais pas Delphi, mon petit doigt me dit que ce n'est pas vraiment le but recherché.

    Qu'est-ce que tu veux "réellement" faire ?

    Tatayo.

    P.S. Je pense que tu devrais éviter le SELECT * et nommer les colonnes qu'il faut réellement récupérer, surtout si (si je ne me trompe pas) comme ici une seule colonne est utilisée.
    Et il faudrait tester la bonne exécution de la requête, en cas d'erreur ça peut fournir de précieuses indications sur l'origine de celle-ci.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 579
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    J'ai plusieurs remarques à faire.
    Tout d'abord, sur le fond : le Form1 est inutile

    Tout d'abord j'ai quelques doutes sur le SQL indiqué : les guillemets et la formulation, vous recherz quelque chose qui contient cherche pas la valeur de edit2.text.
    donc je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var cherche:='%'+Edit2.Text+'%'; // et peut-être même une utilisation de Trim cherche:='%'+Edit2.Text.Trim+'%' ou cherche:='%'+Trim(Edit2.Text)+'%' 
    // mais ça c'est un choix (utiliser les espaces ou pas ?)
    // on peut aussi se demander si vous voulez que ce soit sensible à la casse ou pas
    en plus, je suggèrerai d'ajouter une clause 'ORDER BY num_yvert' pour plus de cohérence/facilité

    au cas ou j'aurais plusieurs résultats je les charge comment dans mon listbox
    pour cela il faut une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var cherche:='%'+Edit2.Text+'%';
    FDQuery1.Close; // nécessaire
    FDQuery1.SQL.Clear;
    FDQuery1.SQL.Add('SELECT num_yvert FROM macollec WHERE num_yvert like '+QuetedStr(Cherche));
    FDquery1.Open();
    ListBox1.Items.Clear; // effacer ancienne liste
    while not FDQuery1.EOF do
           begin 
                ListBox1.Items.Add(FDquery1.FieldByName('num_yvert').AsString);
                FDQuery1.Next;
           end;
    If listBox1.Items.Count>0 then 
       ListBox1.ItemIndex:=0;  // Se positionne sur le premier résultat

    Je proposerais plutôt quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    FDQuery1.SQL.Text:='SELECT num_yvert FROM macollec WHERE num_yvert like'+QuotedStr(Cherche); // plus besoin du Clear
    et comme il s'agit de Firedac le quartet Close, SQL.Clear,SQL.Add,Open pourrait être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var SQL:='SELECT num_yvert FROM macollec WHERE num_yvert like %'+QuotedStr(Edit2.Text);
    FDquery.Open(SQL);
    Optimisons encore. Si le FDquery n'est plus utilisé, autant le créer au runtime
    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
    procedure TForm1.Panel14Click(Sender: TObject);
    var aFDQ : TFDQuery;
         aSQL : String;
         Cherche : String;     
    begin
      cherche:='%'+Edit2.Text+'%';
      aFDQ:=TFDQuery.Create(nil);
      try
        aFDQ.Connection:=FDConnection:
        aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like %'+QuotedStr(Edit2.Text)+'%';
        aFDQ.Open(SQL);
        ListBox1.Items.Clear; // effacer ancienne liste
        while not FDQuery1.EOF do
           begin 
                ListBox1.Items.Add(aFDQ.FieldByName('num_yvert').AsString);
                aFDQ.Next;
           end;
          If listBox1.Items.Count>0 then 
            ListBox1.ItemIndex:=0;  // Se positionne sur le premier résultat 
       finally
         afdQ.Free;
       end;
    end;
    Je pourrai aussi ajouter que Firedac propose l'utilisation de paramètres mais Like et paramètre n'ont jamais fait bon ménage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like :cherche';
     aFDQ.Open(SQL,[QuotedStr(Cherche)]);
    (à vérifier avec MySQL, avec Firebird cela ne fonctionnerait pas)
    il y a aussi les macros, je n'ai jamais essayé. les macros avec Open je n'ai jamais essayé. c'est une lacune que je vais combler sous peu pour satisfaire ma curiosité.
    en théorie je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     aFDQ.MacroByName('whereclause').asRaw:='WHERE num_yvert like '+QuotedStr(Cherche); 
     aFDQ.Open('SELECT num_yvert FROM macollec &whereclause',[QuotedStr(Cherche)]);
    mais c'est une théorie, pas une certitude (d'où ma curiosité)

    Pour ce qui est du remplissage de la Listbox, j'aurais aussi des choses à dire :
    Pourquoi un ListBox et pas un combobox ?
    Si le programme est VCL un DBComboBox, si le programme est FMX un Livebinding ferait le job (sans la boucle donc).

    S'il s'agit d'un programme FMX, je propose également une alternative de mon cru.

    Sur ce je vais tenter de satisfaire ma curiosité. @Plus

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 579
    Billets dans le blog
    65
    Par défaut curiosité satisfaite
    Voilà ce que je propose en VCL

    Nom : Capture.PNG
Affichages : 107
Taille : 28,7 Ko

    avec un code simplissime et suffisant (quand on utilise les Livebindings )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm5.Button1Click(Sender: TObject);
    begin
    if Trim(edit1.Text)=EmptyStr
      then FDQuery1.MacroByName('whereclause').Clear  // obtient la liste entière
      else FDQuery1.MacroByName('whereclause').AsRaw:=Format('where name like %s',[QuotedStr('%'+Trim(Edit1.text)+'%')]);
    FDQuery1.Open();
    end;
    la requête ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Name FROM COUNTRIES  &whereclause order by name

    petite amélioration, en faisant bien attention au nombre de % et d'apostrophes on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDQuery1.MacroByName('whereclause').AsRaw:=Format('where name like ''%%%s%%''',[Trim(Edit1.text)]);

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 417
    Par défaut
    Bonjour,
    en premier lieu, merci pour vos efforts c’est sympa de voir que malgré ma faiblesse en codage vous vous intéressez a mon problème,

    Je vais essayer d’être le plus précis possible

    j’utilise Mysql avec MariaDB pour mon site en PHP donc je souhaite rester avec la même base

    j’ai une form sur laquelle il y a FDConnection1 et FDQuery1 qui me servent pour lire ma table « macollec » jusque là tout va bien

    Maintenant j’ai besoin d’extraire de ma table une liste de timbres qui comprennent (par exemple « 13 ») dans la colonne « num_yvert »

    pour cela j’ai un Edit2 dans lequel je saisi un chiffre (par exemple « 13 ») et j’ai un bouton pour lancer la procédure, le résultat devrait être 13 et 13A avec la valeur de ID afficher dans mon lisbox (je ne sais pas si c’est le bon outil) car après en cliquant sur un résultat je veux afficher toutes les info de ce timbre (donc la ligne ID)

    J’ai copié le code fourni par SergioMaster
    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
    procedure TForm1.Panel14Click(Sender: TObject);
    var aFDQ : TFDQuery;
         aSQL : String;
         Cherche : String;     
    begin
      cherche:='%'+Edit2.Text+'%';
      aFDQ:=TFDQuery.Create(nil);
      try
        aFDQ.Connection:=FDConnection1:
        aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like %'+QuotedStr(Edit2.Text)+'%';
        aFDQ.Open(aSQL);
        ListBox1.Items.Clear; // effacer ancienne liste
        while not FDQuery1.EOF do
           begin 
                ListBox1.Items.Add(aFDQ.FieldByName('num_yvert').AsString);
                aFDQ.Next;
           end;
          If listBox1.Items.Count>0 then 
            ListBox1.ItemIndex:=0;  // Se positionne sur le premier résultat 
       finally
         afdQ.Free;
       end;
    end;
    mais là j’ai cette erreur


    Nom : collec.png
Affichages : 99
Taille : 175,3 Ko

    et je suis un peu coincé
    Ça fait plusieurs années que je ne m’étais pas replongé dans Delphi et les neurones sont un peu rouillés ( l’age n’arrange pas les choses n’ont plus)

    Encore merci pour votre aide et désolé si je suis peu « lourd »

    PS je ne connais pas du tout Livebindings

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 408
    Par défaut
    Il manque des cotes dans la requête, il faudrait utiliser la fonction QuotedStr comme l'indique SergioMaster.

    Tatayo.

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 049
    Par défaut
    L'erreur est sur cette ligne là, avec le code fourni, l'erreur de syntaxe est évidente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like %'+QuotedStr(Edit2.Text)+'%';
    Votre code génère ce SQL : SELECT num_yvert FROM macollec WHERE num_yvert like %'13'% ;

    le correctif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like '+QuotedStr('%' + Edit2.Text '%');
    Ce code génère ce SQL : SELECT num_yvert FROM macollec WHERE num_yvert like '%13%' ;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 921
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 921
    Par défaut
    % mal placé en procédant ainsi. Plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cherche := '%' +Edit2.Text +'%';
    aSQL := 'SELECT num_yvert FROM macollec WHERE num_yvert LIKE ' +QuotedStr(cherche);
    Mais une requête paramétrée a ma préférence, avec toute la logique en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aFDQ.Open('SELECT num_yvert FROM macollec WHERE num_yvert LIKE CONCAT("%", :Text, "%")', [Edit2.Text]);

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 579
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Citation Envoyé par AndnotOr
    Mais une requête paramétrée a ma préférence,
    la mienne aussi, généralement mais l'approche macro a des avantages (notamment pour avoir la liste entière) de plus je ne suis pas très utilisation des guillemets dans du code SQL .
    et ce encore plus si comme l'indique l'image écran on peut avoir affaire à 2 critères (num_yvert et année)
    P.S. Là il faudrait certainement avoir plus de détail de la structure de la table afin de connaitre le type de cette colonne année et intégrer la demande


    Citation Envoyé par michel71 Voir le message
    j’utilise Mysql avec MariaDB pour mon site en PHP donc je souhaite rester avec la même base
    Du coup je serai parti sur une application multi-tiers (Scripts PHP pour accéder aux données et REST côté Delphi) plutôt que client/serveur

    Citation Envoyé par michel71 Voir le message
    aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like %'+QuotedStr(Edit2.Text)+'%';
    mea culpa, mea maxima culpa. Un copier/merder de votre code pour faire plus vraisemblable mais en oubliant la variable cherche !
    il fallait lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     aSQL:='SELECT num_yvert FROM macollec WHERE num_yvert like '+QuotedStr(cherche);
    Citation Envoyé par michel71 Voir le message
    PS je ne connais pas du tout Livebindings
    comme beaucoup et surtout s'il s'agit de VCL qui a des composants sensibles aux données (TDBxxxxxx).

    Citation Envoyé par michel71 Voir le message
    après en cliquant sur un résultat je veux afficher toutes les info de ce timbre (donc la ligne ID)
    Oublions donc livebindings, mais pas forcément le reste. Je propose une solution en gardant la TListbox mais 2 requêtes.

    Nom : Capture.PNG
Affichages : 87
Taille : 28,5 Ko

    Je conçois que l'approche soit un peu plus complexe (utilisation d'un FDUpdateSQL pour la requête 2) mais c'est certainement parce que j'ai l'habitude du multi-utilisateur
    J'en ai profité aussi pour anticiper les ajouts/suppression
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    unit liketest;
     
    interface
     
    uses
      Winapi.Windows,
      Winapi.Messages,
      System.SysUtils,
      System.Variants,
      System.Classes,
      Vcl.Graphics,
      Vcl.Controls,
      Vcl.Forms,
      Vcl.Dialogs,
      FireDAC.Stan.Intf,
      FireDAC.Stan.Option,
      FireDAC.Stan.Error,
      FireDAC.UI.Intf,
      FireDAC.Phys.Intf,
      FireDAC.Stan.Def,
      FireDAC.Stan.Pool,
      FireDAC.Stan.Async,
      FireDAC.Phys,
      FireDAC.Phys.MySQL,
      FireDAC.Phys.MySQLDef,
      FireDAC.VCLUI.Wait,
      FireDAC.Stan.Param,
      FireDAC.DatS,
      FireDAC.DApt.Intf,
      FireDAC.DApt,
      Vcl.StdCtrls,
      Data.DB,
      FireDAC.Comp.DataSet,
      FireDAC.Comp.Client,
      Vcl.Mask,
      Vcl.ExtCtrls,
      Vcl.DBCtrls,
      Vcl.Buttons,
      Data.Bind.EngExt,
      Vcl.Bind.DBEngExt,
      Data.Bind.Components;
     
    type
      TForm5 = class(TForm)
        FDConnection1: TFDConnection;
        FDQuery1: TFDQuery;
        ListBox1: TListBox;
        FDQuery1Name: TStringField;
        Edit1: TEdit;
        Button1: TButton;
        DataSource1: TDataSource;
        FDQuery2: TFDQuery;
        DBEdit1: TDBEdit;
        DBEdit2: TDBEdit;
        DataSource2: TDataSource;
        FDUpdateSQL2: TFDUpdateSQL;
        DBNavigator1: TDBNavigator;
        procedure Button1Click(Sender: TObject);
        procedure ListBox1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FDQuery2AfterInsert(DataSet: TDataSet);
        procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
        procedure FDQuery2AfterDelete(DataSet: TDataSet);
      private
        { Déclarations privées }
        procedure filllistbox(const lastitem : String = '');
      public
        { Déclarations publiques }
      end;
     
    var
      Form5: TForm5;
     
    implementation
     
    {$R *.dfm}
     
    uses system.math;
     
    procedure TForm5.Button1Click(Sender: TObject);
    begin
    if Trim(edit1.Text)=EmptyStr
      then FDQuery1.MacroByName('whereclause').Clear
      else FDQuery1.MacroByName('whereclause').AsRaw:=Format('where name like ''%%%s%%''',[Trim(Edit1.text)]);
    FDQuery1.Open();
    FillListBox;
    end;
     
    procedure TForm5.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    case Button of
      nbFirst: ListBox1.ItemIndex:=0;
      nbPrior: ListBox1.ItemIndex:=MaxIntValue([0,ListBox1.ItemIndex-1]);
      nbNext: ListBox1.ItemIndex:=MinIntValue([Listbox1.Items.Count-1,ListBox1.ItemIndex+1]);
      nbLast: ListBox1.ItemIndex:=Listbox1.Items.Count-1;
      nbInsert: Fdquery2.Insert;
      nbDelete: try Fdquery2.delete; except end; // au cas où
    end;
    // se positionne
    case Button of
      nbFirst,
      nbPrior,
      nbNext,
      nbLast: FDQuery2.Open('',[Listbox1.Items[Listbox1.ItemIndex]]);
    end;
     
    end;
     
    procedure TForm5.FDQuery2AfterDelete(DataSet: TDataSet);
    begin
    filllistbox;
    end;
     
    procedure TForm5.FDQuery2AfterInsert(DataSet: TDataSet);
    begin
    filllistbox(FDquery2.FieldByName('name').asString);
    end;
     
    procedure TForm5.filllistbox(const lastitem : String = '');
    begin
    ListBox1.Items.Clear;
    while not FDQuery1.EOF do
     begin
      ListBox1.Items.Add(FDQuery1.Fields[0].asString);
      FDquery1.Next;
     end;
    FdQuery1.First;   // se repositionner au début
    if ListBox1.Items.Count>0 then
     begin
       if lastitem.IsEmpty then Listbox1.ItemIndex:=0
                           else ListBox1.ItemIndex:=ListBox1.Items.IndexOf(lastitem);
       FDQuery2.Open('',[Listbox1.Items[Listbox1.ItemIndex]]);
     end;
    end;
     
    procedure TForm5.FormCreate(Sender: TObject);
    begin
     FDQuery1.MacroByName('whereclause').Clear;
     FDQuery1.Open;
     FillListBox;
    end;
     
    procedure TForm5.ListBox1Click(Sender: TObject);
    begin
    FDQuery2.Open('',[Listbox1.Items[ListBox1.ItemIndex]]);
    end;
     
    end.
    Cela étant, si vous rester sur la solution une seule requête, la propriété filter est peut-être plus adaptée, toutefois dans ce cas un FDTable serait certainement plus approprié.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FdTable1.Filter:='LIKE ''%'+edit2.text+'''%';
    FdTable1.Filtered:=true; 
    // chargement de ListBox1

  10. #10
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 417
    Par défaut
    Bonjour,
    merci à tous
    Pour sergioMaster annee (srting) et num_yvert sont deux requêtes différentes

    Le problème est résolu j'ai bien le résultat attendu
    Notamment avec cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT num_yvert FROM macollec WHERE num_yvert like '+QuotedStr('%' + Edit2.Text + '%');
    Je ne connaissais pas QuotedStr
    Il faut dire que j'étais resté a Delphi 7 (je suis passé 11 community) et que je n'avais jamais utiliser de base de données
    donc un peu compliqué pour moi
    Bonne journée

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 579
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par michel71 Voir le message
    Il faut dire que j'étais resté a Delphi 7 (je suis passé 11 community)
    Cela se ressent, mais autant profité des possibilités des dernières versions !
    Citation Envoyé par michel71 Voir le message
    que je n'avais jamais utiliser de base de données
    là aussi, écrire "annee (string)" me l'avait bien fait subodoré ! Une année devrait être un chiffre ou contenu dans une date.
    Mais je l'avais déjà plus ou moins déduit en regardant l'image (barre phosphor avec un X une colonne de type boolean aurait certainement été plus adaptée et du coup un case à cocher)

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

Discussions similaires

  1. [MFC] Accès pointeur qui donne rien :s
    Par EagleEye dans le forum MFC
    Réponses: 3
    Dernier message: 02/03/2006, 18h32
  2. balise img qui ne donne rien online
    Par Pro-Phil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/10/2005, 11h17
  3. Rnd qui ne donne pas que des bonnes valeurs
    Par kubito dans le forum Access
    Réponses: 2
    Dernier message: 08/10/2004, 18h00
  4. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 19h38
  5. CComboBox::setCurSel ne donne rien
    Par jul54 dans le forum MFC
    Réponses: 5
    Dernier message: 11/02/2004, 13h55

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