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 :

Modification sur une Table en présence de Query


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut Modification sur une Table en présence de Query
    Bonjour,
    Je veux effectuer des modification dans la Table(Paradox7) mais comme j'utilise un Query (Pour effectuer le Tri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select * from PAPERSG order by 1 ASC
    ) je ne sais pas comment procéder.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form1.Table1.Edit;
    Form1.Table1.FieldValues['FSR'] := 1;
    Ce code ne fonctionne pas en présence de Query!
    Je me documente sur le Query car je n'ai pas de bonne connaissance sur ce composant, mais S.V.P si vous avez une solution n'hésitez pas car c'est urgent!
    Merci s.v.p

    (Delphi5)

  2. #2
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    salut
    alors il te manque une 3eme ligne
    voila le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    form1.table1.edit;
    form1.table1.fieldvalues['ton_champ']:=1;
    form1.table1.post;
    remarque:
    ce code marche a la presence du composant TTABLE

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Merci kroma23 pour la réponse
    Citation Envoyé par kroma23 Voir le message
    salut
    remarque:
    ce code marche a la presence du composant TTABLE
    Je suis d'accord avec toi mais dès que je rajoute le query cela ne fonctionne pas.
    La présence de query est indispensable car je l'utilise pour le Tri.

  4. #4
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    re
    jai pas comprie bien ta question
    vous voulez faire un tri a votre talble ou koi

  5. #5
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Salut,
    Je m'explique: Mon application effectue le Tri, la Recherche et la modification.
    Le Tri marche Bien avec la code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from PAPERSG order by 1 ASC
    La recherche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    Form1.Query1.Locate('NOM',Edit1.Text,[Lopartialkey]); //J'ai remplacé Table1 avec query1 et ça à marcher
    end;
    Mais la modification ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
    form1.table1.edit;
    form1.table1.fieldvalues['FSR']:=1;
    form1.table1.post;
     
    end;
    Les composants utilisés: DataSource1, Query1 et Table1


    Est ce qu'il y a un autre moyen pour effectuer la modification sans utiliser Table1 dans le code?

    Si ce n'est pas clair je peux reexpliquer !
    L'important est de trouver une solution, Merci de m'aider.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    mmmh ça reste un peu confus ton histoire car on ne sait pas quelles sont les interactions entre tes composants, qui est liés à qui, etc...

    Aussi je vais partir sur quelques généralités, peut-être que ça t'aidera :

    Les TTables travaillent directement avec les tables de la base de données, ainsi un edit-post sur un TTable enregistre automatiquement la modification en base. Il est également possible de trier les enregistrement via IndexFieldNames (bien que sous Paradox il faut créer un index correspondant sur la table elle-même si je me rappelle bien).

    Les TQuery exécute une requête et récupère un jeu d'enregistrement déconnecté de la base de donnée. On peut les trier via IndexFieldNames mais faire un edit-post sur un TQuery ne fait la modification que sur le TQuery en lui-même, pas en base de donnée. Pour ce faire il faut exécuter une requête d'update pour que la modification soit bien effective en base de donnée.

    Évidemment ce que je viens de dire est également vrai pour la suppression et l'insertion.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  7. #7
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Les TQuery exécute une requête et récupère un jeu d'enregistrement déconnecté de la base de donnée. On peut les trier via IndexFieldNames mais faire un edit-post sur un TQuery ne fait la modification que sur le TQuery en lui-même, pas en base de donnée. Pour ce faire il faut exécuter une requête d'update pour que la modification soit bien effective en base de donnée
    - J'utilise le Query et DataSource, ils sont liés entre eux
    - Jusqu'a maintenant je n'utilise pas TTable
    - Ma Table (crée avec Paradox 7) ne contient aucun index (Pour des raison de réutilisation de la Table)
    - 'Query' je l'utilise pour effectuer le Tri avec le code SQL suivant:
    select * from PAPERSG order by 1 ASC
    Sur La Form j'ai:

    -Deux edit qui me permettent d'effectuer la recherche:
    edit1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1.Query1.Locate('NOM',Edit1.Text,[Lopartialkey]);
    edit2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1.Query1.Locate('PRENOM',Edit2.Text,[Lopartialkey]);
    - Un Dbgrid qui me permet de visualiser le contenu de ma table et de la trier cela en cliquant sur l'entête de la Dgrid et évidemment un code est associer à l'évènement DBGrid1TitleClick
    Ce qui me reste à faire après le tri et la Recherche de l'agent :
    - Une fois l'agent trouvé je dois modifier le contenu d'un champ ([FSR] dans mon cas)

    Comment je fais pour appliquer cette modification?
    Votre réponse
    "Pour ce faire il faut exécuter une requête d'update pour que la modification soit bien effective en base de donnée."

    Ok! mais je ne sais pas comment? Je rajoute un autre query ou je désactive la première requête?
    Pourriez vous me donner un exemple de code
    Merci...

  8. #8
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par kiminfor Voir le message
    Salut,
    Je m'explique: Mon application effectue le Tri, la Recherche et la modification.
    Le Tri marche Bien avec la code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from PAPERSG order by 1 ASC
    La recherche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    Form1.Query1.Locate('NOM',Edit1.Text,[Lopartialkey]); //J'ai remplacé Table1 avec query1 et ça à marcher
    end;
    Mais la modification ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
    form1.table1.edit;
    form1.table1.fieldvalues['FSR']:=1;
    form1.table1.post;
     
    end;
    Les composants utilisés: DataSource1, Query1 et Table1


    Est ce qu'il y a un autre moyen pour effectuer la modification sans utiliser Table1 dans le code?

    Si ce n'est pas clair je peux reexpliquer !
    L'important est de trouver une solution, Merci de m'aider.
    Qu'est-ce que tu veux dire par la "modification de fonctionne pas" ?
    Est-ce que tu as un message d'erreur ?

    Je dis ça parce que je sens venir le coup, où la modification serait bien faite dans la table, mais que tu ne rafraichirais pas la query ensuite. Comme l'a dit Aka Guymelef, le TQuery retourne un jeu de données déconnecté. Les modifications faites dans les tables ne sont pas visibles tant que la query n'est pas rééxécutée !

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ton problème est que tu dois exécuter une requête SQL pour bien enregistrer ta modification en base. Pour ce faire je te conseilles d'avoir un autre Query (ou bien en créer à la volée) qui ne sert qu'à ça (en n'oubliant pas de configurer sa connexion).

    Puis exécuter une requête d'update comme ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Query2.ParamByName('pFSR').AsInteger = 1;
    Query2.ParamByName('pID').Value = idDeLaLigneAModifier;
    Query2.SQL.Text = 'UPDATE PAPERSG SET FSR = :pFSR WHERE id = :pID';
    Query2.ExecSQL;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  10. #10
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    ça devient compliquer désolé mais je n'ai pas bien compris, veuillez m'expliquer d'avantage.
    Qu'est ce que je met dans le SQL de Query2?
    Merci

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;
    A mon avis il faut faire appel à la méthode Refresh après chaque modification ou avant chaque appel à TQuery.

    Bon codage.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Requête sur une table de présence
    Par mdcuno dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/06/2014, 10h56
  2. Historisation des modifications effectuées sur une table SQL
    Par Drooxy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/10/2007, 13h29
  3. Réponses: 2
    Dernier message: 09/11/2006, 14h46
  4. [WinForms]Répercuter la modification d'une table sur le Dataset
    Par kritopal dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/09/2006, 09h06
  5. Modification de clé primaire sur une table répliquée
    Par Peck777 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/07/2006, 15h25

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