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

Lazarus Pascal Discussion :

Problèmes SQLQuery MySQL et Lazarus 1.4.4 FPC 2.6.4 [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut Problèmes SQLQuery MySQL et Lazarus 1.4.4 FPC 2.6.4
    Bonjour à tous,
    Après avoir (enfin) réussi à réaliser correctement des écritures dans la BDD - nécessité de gérer le commit de la transaction depuis FPC 2.6.4-, me voilà face à un problème de rafraichissement de mes SQLQuery :
    J'affiche un DBGrid, ou tout autre composant, pointant sur un datasource->SQLQuery. Tout va bien.
    J'ouvre une fiche insérant un enregistrement dans la table. Je vérifie via MYSQL Workbench que l'enregistrement est bien inséré.
    Retour sur ma fiche principale. Le Query ne s'actualise pas, même avoir tout essayé : Close puis Open, Active:=false puis Active:=true, réécriture SQLQuery.SQL, ExecSQL, Refresh...
    SQLQuery.RecordCount ne s'incrémente pas.
    Après la sortie, puis le retour dans l'application, les modifications apparaissent bien.
    Quelqu'un aurait-il une idée ?
    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Ok, Je pense avoir compris mon erreur. Il s'agit encore d'un problème philosophique de Transaction. J'utilisais 2 Transactions différentes sur les fiches. Il semblerait qu'il faille utiliser la même... Certainement dû à des données en cache dans les composants.
    Cela m'amène à une autre question : Dans une application, doit-on n'utiliser qu'un couple SQLConnection-SQLTransaction pour l'ensemble des fiches ?

  3. #3
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonjour,
    (selon ma compréhension au transactions )

    1/Tout d'abord je favorise le type read-committed pour une transaction, car il est le type (à mon avis) le plus pratique.
    -copier isc_tpb_read_committed dans le 'Dialogue d'éditeur de chaînes' (SQLTransactionx/params).
    ou: SQLTransactionx.Params.Add('isc_tpb_read_committed') ;

    2/ Si vous avez n SqlQuery reliées à n SqlTransactions, et à une seule source de données(Table1), et que une fois l'une de ces
    transactions fait une modification, alors les autres ne voient les MAJ qu'après leurs fermetures et leurs ouvertures par:

    SqlTransactionx.commit; // fermeture automatique de la transaction.
    SqlQueryx.active:=True; //ouverture automatique de la transaction;

    et non ça:
    SqlQueryx.close; // car ici la transaction ne se ferme pas.
    SqlQueryx.open;

    Donc le code serait:
    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.SqlQuery1AfterPost(DataSet: TDataSet);
    begin
       SqlQuery1.ApplyUpdates ;
      SQLTransaction1.Commit ;
      SqlQuery1.Active:=True ;
     
      SQLTransaction2.Commit ;
      SqlQuery2.Active:=True ;
          .
          .
     SQLTransactionN.Commit ;
     SqlQueryN.Active:=True ;
    end;
    3/Attribuer toutes les SqlQueries à une même transaction marche pour un seul utilisateur, mais il n'est pas adapté au mode réseau,
    parce que si tu fais la mise à jour à cette transaction, toutes les SqlQueries se ferment automatiquement.

    merci.

  4. #4
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Ok,
    Merci pour cette réponse complète. Je ne connaissais pas 'isc_tpb_read_committed'.
    J'imaginais naïvement que la gestion des transactions ne s'appliquait qu'à l'écriture des données, et non à la lecture.
    J'ai trouvé une solution qui consiste à exécuter un SQLTransactionx.CommitRetaining pour rafraichir les SQLQuery associées. Ce n'est peut-être pas très orthodoxe, mais ça fonctionne.
    Merci pour votre aide.

  5. #5
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Par défaut
    Bonsoir,
    Tu as tout à fait raison, SQLTransactionx.CommitRetaining fait un rafraîchissement sans fermer le SQLQuery!!
    je l'utiliserai prochainement.

    Bonne continuation.
    merci.

  6. #6
    Membre averti
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Par défaut
    Heureux d'avoir pu - pour une fois - donner une info utile !

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

Discussions similaires

  1. [Lazarus] Problème MySql et lazarus
    Par Biobytes dans le forum Lazarus
    Réponses: 2
    Dernier message: 07/04/2015, 21h15
  2. problème avec MySql
    Par cescu dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/02/2006, 12h18
  3. Problème accent mysql
    Par staive dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 01/02/2006, 19h11
  4. [JDBC]Problème Accent MySQL depuis DB browser dans eclipse
    Par chpruvos dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/08/2005, 14h14

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