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 :

Erreur lors du filtrage


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut Erreur lors du filtrage
    Salut tout le monde,
    j'ai ce message d’erreur après que j'utilise le bouton du filtrage
    Voici le code que j'utilise en sachant que j'utilise un RadioGroup pour filtrer ma table et un ADOQuery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm3.sButton1Click(Sender: TObject);
     var x:string;
    begin
    case RadioGroup1.ItemIndex of
    0: x:='Num_inscription';
    1: x:='Num_identification';
    2: x:='Nom';
    3: x:='Prénom';
    end;
    ADOQuery2.Filter:=x+'='''+sEdit1.Text+'''';
    ADOQuery2.Filtered:=true;
    end;
    Nom : erreur.jpg
Affichages : 295
Taille : 27,9 Ko

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je ne suis pas très porté sur les filtres (sauf peut-être pour les tables Paradox)
    néanmoins quelque chose me choque vous ne désactivez pas le filtre avant de le modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm3.sButton1Click(Sender: TObject);
     var x:string;
    begin
    case RadioGroup1.ItemIndex of
    0: x:='Num_inscription';
    1: x:='Num_identification';
    2: x:='Nom';
    3: x:='Prénom';
    end;
    ADOQuery2.Filtered:=False;
    ADOQuery2.Filter:=x+'='+QuotedStr(sEdit1.Text);
    ADOQuery2.Filtered:=true;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    C'est toujours la même erreur...

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Et bien n'utiliser pas de filtre et modifiez directement votre requête SQL
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    j'ai mis cette Requête SQl dans le ADOQuery:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM table_stagiaire
    WHERE code_section:=code_section
    Le problème c'est quand je l'utilise pour la première fois ça marche parfaitement mais quand je veux l'utilisé une 2eme fois ça me donne le message d'erreur

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Déjà votre requête est erronée
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table_stagiaire WHERE code_section=:code_section
    ensuite vous n'indiquez pas le message d'erreur mais, en supposant que vous vouliez implémenter votre "filtrage" cela donnerait quelque chose comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm3.sButton1Click(Sender: TObject);
     var x:string;
    begin
    case RadioGroup1.ItemIndex of
    0: x:='Num_inscription = '+QuotedStr(Edit1.text);
    1: x:='Num_identification= '+QuotedStr(Edit1.text);
    2: x:='Nom= '+QuotedStr(Edit1.text);
    3: x:='Prénom= '+QuotedStr(Edit1.text);
    else x:='1=1'; // tous 
    end;
    ADOQuery2.Active:=False;
    ADOQuery2.SQL.Text:=Format('SELECT * FROM table_stagiaire WHERE %s',[x]);
    ADOQuery2.Active:=true;
    end;
    cela étant il y a beaucoup d'autres possibilités.
    Une des choses que j'aime avec firedac c'est qu'il y a aussi les macros tout à fait adaptées à ce genre de cas
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    ça marche mais le Filtrage ne marche pas.
    Mais bon, je crois que j'ai résolu le problème, Merci beaucoup pour ton aide Ami..

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par CreedApollo Voir le message
    ça marche mais le Filtrage ne marche pas.
    ça ne fonctionne pas car quand vous avez posé votre question vous n'avez pas indiqué tous les éléments.
    Comment deviner que cette question faisait suite à celle-ci D'ailleurs c'est ce qui explique certainement l'erreur du début de la discussion.

    Bien évidemment le SQL que j'avais proposé n'était qu'un exemple de comment construire une requête de base le fait que la requête soit plus complexe
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * FROM STAGIAIRE WHERE "code section"=:"code section"
    demande bien sûr adaptation

    tout d'abord j'ajouterai une constante à vous de voir si vous préférez en faire une constante globale ou locale
    const FmtSQLStagiaire='SELECT * FROM STAGIAIRE WHERE "code section"=:"code section" %s';
    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
     
    procedure TForm3.sButton1Click(Sender: TObject);
    var x:string;
    begin
    case RadioGroup1.ItemIndex of
    0: x:='AND Num_inscription = '+QuotedStr(Edit1.text);
    1: x:='AND Num_identification= '+QuotedStr(Edit1.text);
    2: x:='AND Nom= '+QuotedStr(Edit1.text);
    3: x:='AND Prénom= '+QuotedStr(Edit1.text);
    end;
    if Edit1.Text.IsEmpty then x:='';
    ADOQuery2.Active:=False;
    ADOQuery2.SQL.Text:=Format(fmtSQLStagiaire,[x]);
    ADOQuery2.Active:=true;
    end;
    et voilà vous avez ainsi l'équivalent d'une macro firedac
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    case RadioGroup1.ItemIndex of
    0: x:='AND Num_inscription = '+QuotedStr(Edit1.text);
    1: x:='AND Num_identification= '+QuotedStr(Edit1.text);
    2: x:='AND Nom= '+QuotedStr(Edit1.text);
    3: x:='AND Prénom= '+QuotedStr(Edit1.text);
    end;
    Ce genre que code me fait peur
    Ce n'est pas sécurisé d'exécuter des requêtes avec des données saisies par les utilisateurs.
    Il serait préférable de passer par des requêtes paramétrées.

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Oui, je suis d'accord quant au risque d'injection SQL mais, avec les contraintes je ne vois pas trop (et je n'ai pas vraiment cherché) comment inclure le paramètre. il faut dire que ADO n'aide pas
    Et puis, j'ai montré comment faire à CreedApollo de se débrouiller pour changer ça
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Sans avoir testé, j'image un code de ce genre :

    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 x:string;
    begin
      case RadioGroup1.ItemIndex of
        0: x := 'AND Num_inscription = :edittext';
        1: x := 'AND Num_identification = :edittext';
        2: x := 'AND Nom = :edittext';
        3: x := 'AND Prénom = :edittext';
      end;
     
      if Edit1.Text.IsEmpty then x := '';
     
      ADOQuery2.Active := False;
      ADOQuery2.SQL.Text := Format(fmtSQLStagiaire,[x]);
     
      if (not Edit1.Text.IsEmpty) then
        ADOQuery2.Parameters.ParamByName('edittext').Value := Edit1.text;
      ADOQuery2.Active := True;
    end;

Discussions similaires

  1. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  2. Erreur lors de la connexion
    Par mathll65 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2004, 17h46
  3. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

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