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 :

[IBX et Interbase] Filter sur une procedure stockée


Sujet :

Bases de données Delphi

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut [IBX et Interbase] Filter sur une procedure stockée
    Bonjour a tous,
    svp, j'ai une procédure stockée qui parmi les résultats qui retourne , liste des produits avec leur désignation.
    pour une recherche rapide sur cette procédure stockée , j'ai mis un composant edit , et dans l’événement ONChange (de ce dernier) j'ai mis le code suivant :

    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
     
    IF (edit1.text <> '')  then
          begin
                IBQuery1.close;
                IBQuery1.SQL.Clear;
                IBQuery1.SQL.Add('SELECT    *');
                IBQuery1.SQL.Add('FROM  EtatQteStock');
                IBQuery1.SQL.Add('WHERE UPPER(DESIGNATION) LIKE ' + ''''+ UpperCase(edit1.Text) + '%''');
                IBQuery1.SQL.Add('ORDER BY CODEA');
                IBQuery1.Active := true;
          end
          else
          begin
                IBQuery1.close;
                IBQuery1.SQL.Clear;
                IBQuery1.SQL.Add('SELECT    *');
                IBQuery1.SQL.Add('FROM  EtatQteStock');
                IBQuery1.SQL.Add('ORDER BY CODEA');
                IBQuery1.Active := true;
          end ;
    la requête marche , mais c'est très très lourd...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Sans connaître le détail de ton code d'implantation, il est difficile de donner la meilleure solution.
    Cependant, placer ta requête dans "OnChange", cela conduit à l’exécuter à chaque caractère entré dans ton "Edit". Alors effectivement, bonjour la lenteur.
    Une première amélioration serait d'ajouter un bouton à ton "Edit" et cliquer après avoir saisi la totalité des caractères.
    En tout état de cause, il faut supprimer la requête dans "OnChange"
    Une seconde amélioration serait mettre en œuvre une requête paramétrée et de la positionner dans ton code afin qu'elle soit préparée à l'ouverture de la fiche.

    Ta requête pourrait être :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM EtatQteStock
    WHERE UPPER DESIGNATION LIKE :Parametre%
    ORDER BY CODEA

    Ensuite, il convient d'inclure le paramètre avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query.Close;
    Query.ParamByName('Parametre').AsString := Edit.Text;
    Query.Open;
    A parfaire avec les composants utilisés.

    De plus * n'est pas recommandé, il faut mieux désigner les colonnes à retourner.
    Voilà une première réflexion, mais tu auras d'autres avis pour t'aider.

    A+

  3. #3
    Rédacteur/Modérateur

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

    Une requête sur une procédure stockée c'est loin d'être l'idéal, pas d'index ! le mieux serait, peut-être, de ré-écrire la procédure stockée en y prévoyant un paramètre d'entrée
    ou alors récupérer toutes les données de la procédure dans une table en mémoire pour faire ensuite les recherches à l'intérieur de cette dernière
    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

  4. #4
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Bonjour ,
    Merci a vous deux mes amis

    Sergio a dit :

    Une requête sur une procédure stockée c'est loin d'être l'idéal, pas d'index ! le mieux serait, peut-être, de ré-écrire la procédure stockée en y prévoyant un paramètre d'entrée
    ou alors récupérer toutes les données de la procédure dans une table en mémoire pour faire ensuite les recherches à l'intérieur de cette dernière
    c'est vrais c'est loin d'être l'idéal , mais j'ai pas trouvé une autre solution.
    pour les tables en mémoires , je ne trouve pas comment faire , est ce qu'il y a des composant IBX qui le supporte?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    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 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    pour les tables en mémoires , je ne trouve pas comment faire , est ce qu'il y a des composant IBX qui le supporte?
    - IBX n'est pas ma tasse de thé
    - je ne me souviens pas des versions Delphi utilisés par chaque membre donc l'indiquer pour poser la question serait mieux
    - c'est tellement facile maintenant avec Firedac que je ne me souviens plus bien des alternatives
    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

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Merci Sergio pour la repense,
    je suis sous Delphi7 entreprise + Interbase 7.5 server.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @SergioMaster

    Une requête sur une procédure stockée c'est loin d'être l'idéal, pas d'index ! le mieux serait, peut-être, de ré-écrire la procédure stockée en y prévoyant un paramètre d'entrée
    ou alors récupérer toutes les données de la procédure dans une table en mémoire pour faire ensuite les recherches à l'intérieur de cette dernière
    Je suis d'accord avec toi, sur ce point ma réponse n'était pas complète.

    Effectivement, l'arrivée de Firedac fait oublier les composants utilisés avec les versions antérieures.

    @aimer_Delphi
    pour les tables en mémoires , je ne trouve pas comment faire , est ce qu'il y a des composant IBX qui le supporte?
    Il doit être possible d'utiliser le composant "TIBClientDataSet", après il faut rechercher comment effectuer la mise en œuvre dans ce forum ou en faisant une recherche avec Google. Pour ma part, j'ai un peu oublié.

    A+

  8. #8
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    merci beaucoup seabs .

  9. #9
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    les composants TIBClientDataSet n'existe pas sur la palette Delphi 7 entreprise ,
    même avec la mise a jour des composants IBX livrer avec le CD interbase 7.5 server.

Discussions similaires

  1. Peut t'on faire une procedure stocké sur access ?
    Par Solero dans le forum Access
    Réponses: 6
    Dernier message: 28/01/2019, 11h33
  2. Réponses: 0
    Dernier message: 23/11/2009, 18h05
  3. Réponses: 8
    Dernier message: 06/03/2009, 10h20
  4. tests sur requetes dans une procedure stockée
    Par morback dans le forum SQL
    Réponses: 18
    Dernier message: 30/08/2007, 17h36
  5. Commande d'exécution d'une procedure stockée SQL sur vb
    Par tseg dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/11/2003, 13h47

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