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 :

Mise à Jour Affichage


Sujet :

Bases de données Delphi

  1. #1
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut Mise à Jour Affichage
    Bonjour à tous,

    J'ai une BDD Access attaquée par ADO. Lorsque j'ajoute un enregistrement dans une table (ADO - Query = INSERT), j'aimerais qu'il apparaisse immédiatement dans un DBLookUpComboBox ou dans un DBGrid. Or actuellement, il faut que je ferme puis ré-ouvre l'application ... vous comprenez bien que je ne sois pas satisfait du résultat.

    Je dispose d'un ADOConnexion > ADOQuery > DataSource > DBLookUpComboBox / DBGrid.

    J'ai essayé de fermer/ouvrir la requête, de fermer/ouvrir la ADOConnexion, de rafraichir le DBLookUpComboBox, etc...


    Merci pour vos commentaires éclairés

  2. #2
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 993
    Par défaut
    a la place de adoquery j'utilise un adotable et sur la supression ajout je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ADOTable.Requery();
        (Sender As TDBLookupComboBox).Refresh;
    et ma liste est à jour

    je sais pas si sa peux t'aider

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    forcer le refresh sur l'ensemble de données puisque à la fermeture c'est ce qui se passe en effet si tout s'est bien passé.

  4. #4
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut
    Salut à tous !

    Alors j'ai réessayé de mettre du refresh "un peu partout" --> mais rien. J'ai déconnecté la liaison à la base --> toujours rien !!

    Bref.

    Tout d'un coup, j'ai décidé de faire plusieurs ajouts consécutifs ... et là = mystère :
    - 1er requête INSERT : évidemment : rien (sinon je n'aurais pas ouvert cette discussion !), le DBLookUpComboBox ne prend pas la modification ;
    - 2ème (et 3ème, 4ème, etc) requête INSERT : le DBLookUpComboBox affiche les 2 (3, 4, etc) nouvelles lignes .



    à OUIOUIOUI : j'ai bien essayé avec les ADOTable : mêmes résultats !

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    et si tu mettais entre nos mains ce code si mystérieux !!!

  6. #6
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Oui j'ai déjà vu ça, essaye de mettre ta requête de modif. dans une transaction.

  7. #7
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    et si tu mettais entre nos mains ce code si mystérieux !!!
    C'est bien ça le problème : c'est un code simpliste ... et qui remplit correctement la base : aucun message d'erreur

    dans Form2 = une fiche de saisie des données :
    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
     
    procedure TForm2.EnrgAClient;
    var
      strSQL : WideString;
    begin
      strSQL := 'INSERT INTO clients (idservice, nom, prenom, nbre, genre, valide) '  +
                    'values (:Pidservice, :Pnom, :Pprenom, :Pnbre, :Pgenre, :Pvalide)';
      with DM.ADOQry do
      begin
        Close;
        SQL.text := strSQL;
        ParamCheck := true;
        Parameters.ParamByName('Pidservice').Value := IIfVi(DBLUPCBxCli.KeyValue);  // IIfVi() : convertit, s'il existe, un variant en integer
        Parameters.ParamByName('Pnom').Value := AClient.nom;
        Parameters.ParamByName('Pprenom').Value := AClient.prenom;
        Parameters.ParamByName('Pnbre').Value := AClient.nbre;
        Parameters.ParamByName('Pgenre').Value := AClient.genre;
        Parameters.ParamByName('Pvalide').Value := True;
        ExecSQL;
        Close;
      end;
    end;
    dans le DataModuleCreate :
    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
     
    procedure TDM.DataModuleCreate(Sender: TObject);
      ...
      begin
      ...
        ADOQry.ConnectionString := ADOCnxStr;
      ...
      end;
     
    initialization
      ADOCnxStr :=
         'Provider=Microsoft.Jet.OLEDB.4.0;'+
         'User ID=Admin;' +
         'Data Source=' + dbName + ';' +
         'Mode=Share Deny None;' +
         'Jet OLEDB:Engine Type=5;'
         ;
    @ PhilNext : j'essaie demain la transaction, mais je ne sais pas si le moteur JET les accepte ?

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    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 400
    Par défaut
    Salut;

    dans la procedure EnrgAClient le second close sert à quoi ? moi j'aurais mis un open à la place !

  9. #9
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    ou utilise une TAdoConnection,ADOCommand

  10. #10
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut
    Merci pour toutes vos réponses.

    @ PhilNext : pas eu le temps d'essayer les transactions.

    @JustSoft : effectivement le deuxième close n'a pas d'intérêt. Par contre, pour les requêtes INSERT, j'utilise habituellement un ExecSQL plutôt qu'un Open que je reserve aux clauses SELECT .

    @Montor : j'essaie dès que possible un Active := False;

    Il ne me reste plus qu'à passer à l'oeuvre. Je vous tiens au courant.

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Si tu veux que ton dblookup se mette à jour il serait bien de rafraichir la requête du composant.
    Un requête n'est qu'une vue de la base de données a un instant T.

    Sinon, mis à part çà, avec ado il vaut mieux utiliser requery que refresh
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  12. #12
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Combien de TADOQuery utilise-tu ?
    si une seule
    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
     
    procedure TForm2.EnrgAClient;
    var
      strSQL,OldSql : WideString;
      St:boolean;
    begin
      strSQL := 'INSERT INTO clients (idservice, nom, prenom, nbre, genre, valide) '  +
                    'values (:Pidservice, :Pnom, :Pprenom, :Pnbre, :Pgenre, :Pvalide)';
      with DM.ADOQry do
      begin
        St:=Active;
        OldSql:= SQL.text;
       try
        Close;
        SQL.text := strSQL;
        ParamCheck := true;
        Parameters.ParamByName('Pidservice').Value := IIfVi(DBLUPCBxCli.KeyValue);  // IIfVi() : convertit, s'il existe, un variant en integer
        Parameters.ParamByName('Pnom').Value := AClient.nom;
        Parameters.ParamByName('Pprenom').Value := AClient.prenom;
        Parameters.ParamByName('Pnbre').Value := AClient.nbre;
        Parameters.ParamByName('Pgenre').Value := AClient.genre;
        Parameters.ParamByName('Pvalide').Value := True;
        ExecSQL;
        Close;
       finally
        SQL.text:= OldSql; 
        Active  :=St;
       end;
     
      end;
    end;
    ou tu fais sur qui ADOQuery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       ADOQuery1.Close;
       ADOQuery1.Open;

  13. #13
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut
    Merci pour toutes vos réponses.

    A force de constater que j'avais plus ou moins déjà essayé les solutions que vous avez proposées, je me suis aperçu d'une faille dans mon programme. En fait, en "empilant" les couches avec l'EDI (je veux dire : sans écrire le code à la main), j'ai laissé un DataSource orphelin de son ADOQuery ....

    Problème résolu !

    Encore à vous.

    Quant à moi (), il ne me reste plus qu'à me faire et pour le temps perdu ...

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

Discussions similaires

  1. Mise à jour affichage dans Thread=Effet troboscope non désiré..
    Par frafra49 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 19/02/2014, 11h15
  2. [eCommerce] Mise à jour affichage après paiement en ligne
    Par hellomorld dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 08/06/2012, 14h37
  3. [Lazarus] Mise à jour affichage DbGrid et table Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 1
    Dernier message: 31/03/2010, 09h16
  4. Mise à jour affichage zone de texte
    Par mulanzia2003 dans le forum IHM
    Réponses: 1
    Dernier message: 20/09/2007, 16h20
  5. Mise à jour affichage section détail form
    Par thb74 dans le forum Access
    Réponses: 3
    Dernier message: 27/08/2006, 14h39

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