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 :

Modification d'une ligne SQL déja réalisée!


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Par défaut Modification d'une ligne SQL déja réalisée!
    Bonjour;
    j'ai une requète SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      TdbQuery1.SQL.Clear;
      TdbQuery1.SQL.Add('SELECT');
      TdbQuery1.SQL.Add(' L.titre, D.libelle, A.nom, A.prenom, L.nbr_page, L.langue, L.num_ray, L.etage_ray, L.ISBN, L.date_paru, L.date_achat');
      TdbQuery1.SQL.Add(' FROM LIVRE L ');
      TdbQuery1.SQL.Add(' LEFT JOIN auteur A ON L.id_auteur = A.id_auteur');
      TdbQuery1.SQL.Add(' LEFT JOIN domaine D ON L.id_dom = D.id_dom');
      TdbQuery1.SQL.Add(' WHERE 1 = 1');
      TdbQuery1.SQL.Add(' ORDER BY A.nom ');
     
      TdbQuery1.Prepare;
      TdbQuery1.Open;
    Comme vous voyez, le résultat sera trié par ordre alphabétique du Nom d'auteur...
    Maintenant j'ai placé des RadioBoutton, et je veux que : Quand je clique sur un RadioBoutton (Exemple Prénom auteur, la seul ligne 8 du code SQL TdbQuery1.SQL.Add(' ORDER BY A.nom '); qui change à TdbQuery1.SQL.Add(' ORDER BY A.prenom'); ( au lieu de réécrire tout le code SQL.
    Comment le faire et merci d'avance..
    .

  2. #2
    Membre très actif
    Homme Profil pro
    Developpeur Logiciel
    Inscrit en
    Mai 2016
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2016
    Messages : 108
    Par défaut
    Tu peut créer un évenement onclick pour chacun des boutons
    Ensuite dans chacune de ses procédures tu affectes à une variable local les valeurs que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.rbPrenomAuteurClick(Sender: TObject);
    begin
       cherche := ' a.prenom';
    end;
     
    procedure TForm1.rbLibelleClick(Sender: TObject);
    begin
       cherche := ' D.libelle';
    end;
    Ensuite tu fais appelle à ta requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      TdbQuery1.SQL.Clear;
      TdbQuery1.SQL.Add('SELECT');
      TdbQuery1.SQL.Add(' L.titre, D.libelle, A.nom, A.prenom, L.nbr_page, L.langue, L.num_ray, L.etage_ray, L.ISBN, L.date_paru, L.date_achat');
      TdbQuery1.SQL.Add(' FROM LIVRE L ');
      TdbQuery1.SQL.Add(' LEFT JOIN auteur A ON L.id_auteur = A.id_auteur');
      TdbQuery1.SQL.Add(' LEFT JOIN domaine D ON L.id_dom = D.id_dom');
      TdbQuery1.SQL.Add(' WHERE 1 = 1');
      TdbQuery1.SQL.Add(' ORDER BY'+recherche);
     
      TdbQuery1.Prepare;
      TdbQuery1.Open;

  3. #3
    Rédacteur/Modérateur

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

    un peu plus simple, La propriété SQL est une TStringlist rien n'empêche d'en modifier une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TdbQuery1.SQL[6]:='ORDER BY ....';
    donc pas besoin de réécrire tout le code SQL.Clear, SQL.Add .....
    toutefois il ne faut pas oublier de fermer la requête avant une modification et si cette requête avait été préparée de faire un unprepare

    NB. dans ce cas toutefois le prepare me semble inutile (pas de paramètre)
    NB bis, le WHERE 1=1 est inutile

    on en arrive à 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 TForm1.rbPrenomAuteurClick(Sender: TObject);
    begin
       TDBQuery1.Close;
       TDBQuery1.SQL[6] := 'ORDER BY a.prenom';
       TDBQuery1.Open;
    end;
     
    procedure TForm1.rbNomClick(Sender: TObject);
    begin
       TDBQuery1.Close;
       TDBQuery1.SQL[6] := 'ORDER BY a.Nom';
       TDBQuery1.Open;
    end;

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    un peu plus simple, La propriété SQL est une TStringlist rien n'empêche d'en modifier une ligne
    Le mieux reste quand même la requête paramétrée non ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 657
    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 657
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par Papy214 Voir le message
    Le mieux reste quand même la requête paramétrée non ?
    je ne crois pas que les composants BDE (TDBQuery) acceptent ce type de paramètre (uniquement des valeurs) , en fait le mieux serait une requête avec Macro (proposé par Firedac, RxQuery) dans ce cas.
    Le nec plus ultra serait d'utiliser une expression régulière ou un stringreplace pour faire le remplacement de la clause ORDER BY,

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 103
    Par défaut
    bonjour

    une procédure telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      TdbQuery1.close;
      TdbQuery1.SQL.Clear;
      TdbQuery1.SQL.Add('SELECT');
      TdbQuery1.SQL.Add(' L.titre, D.libelle, A.nom, A.prenom, L.nbr_page, L.langue, L.num_ray, L.etage_ray, L.ISBN, L.date_paru, L.date_achat');
      TdbQuery1.SQL.Add(' FROM LIVRE L ');
      TdbQuery1.SQL.Add(' LEFT JOIN auteur A ON L.id_auteur = A.id_auteur');
      TdbQuery1.SQL.Add(' LEFT JOIN domaine D ON L.id_dom = D.id_dom');
      TdbQuery1.SQL.Add(' WHERE 1 = 1');
    il suffit d'ajouter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if radiobutton1.checked then tdbQuery1.sql.add('order by.....') else
       if radiobutton2.checked then tdbQuery1.sql.add('order by.....') else
          tdbQuery3.sql.add('order by.....');
    tdbQuery1.open;
    La procédure peut etre appelée pendant les évenements onchange des différents radiobuttons

    Bonne continuations.

Discussions similaires

  1. [SQL] Modification d'une table SQL
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/11/2007, 16h30
  2. date auto si modification d'une ligne ou colonne
    Par chris81 dans le forum Excel
    Réponses: 2
    Dernier message: 16/10/2007, 07h40
  3. Modification d'une ligne d'un fichier
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 20/03/2007, 15h29
  4. Réponses: 1
    Dernier message: 19/05/2006, 17h33
  5. Réponses: 3
    Dernier message: 03/04/2006, 10h42

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