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 :

Pas de message d'erreur quand un UPDATE échoue parce que l'enregistrement est verrouillé


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut Pas de message d'erreur quand un UPDATE échoue parce que l'enregistrement est verrouillé
    Delphi XE8 : FireDAC connecté sur Microsoft SQL Server Express 2014

    1- Je me mets en édition sur un champ : l'enregistrement est donc verrouillé

    2- Je lance une requête UPDATE sur cet enregistrement (Update maTable set prenom='Jacques' where id=1)

    3- Je sors du mode Édition et j'actualise mon TDBGrid : manifestement la requête UPDATE a échoué.

    Mon problème : J'aimerais que MSSQL lève une erreur pour m'avertir que le UPDATE a échoué. C'est possible ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Comment tu fais ton update ? Un bout de ton code pourrait nous aider

    C'est des composants DB ? L'update est réalisé avec un simple query ? Peut être une tansaction mal gérée ?

    Tu vois la requête passer sur le profiler SQL Serveur ? Pas de triggers sur la table ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    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 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par maximebonin Voir le message
    1- Je me mets en édition sur un champ : l'enregistrement est donc verrouillé
    Oui mais non, verrouillé dans le DataSource (ou plus exactement dans l'état dsEdit) mais non au niveau du SGBD sensu stricto
    2- Je lance une requête UPDATE sur cet enregistrement (Update maTable set prenom='Jacques' where id=1)
    3- Je sors du mode Édition et j'actualise mon TDBGrid
    Là comme l'indique Retwas il faut être plus précis. On ne sait pas grand chose sur la connexion et la requête (ou table) affichant les données dans la grille
    - mode autocommit ou non ?
    - transaction démarrée ou pas (de plus firedac permet de mettre des transactions différentes entre connexion et tables/querys
    - Cache Updates ou pas ? pour l'ensemble de données

    manifestement la requête UPDATE a échoué.
    pas sûr elle a très bien pu être faite puis ré-écrasée par la suite à la sortie du mode édition auquel cas , l'update n'a pas échoué il y en a eu 2 !

    Il nous faut donc plus d'informations.
    Un moyen de vérification ? avoir une colonne supplémentaire , non répertoriée dans l'affichage, non chargée dans le datasource mais modifiée par la requête UPDATE
    Update maTable set prenom='Jacques',MACOLTEST='TEST' where id=1ou une trace plus poussée soit avec les composants firedac http://docwiki.embarcadero.com/RADSt...ring_(FireDAC) soit avec le SGBD (procédures/déclencheurs ou autres méthodes je ne maitrise pas MS SQLServer)

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut détails
    les composantes déposées sur le Form :

    - TFDConnection
    - TFDQuery (FDQuery1)
    - TDataSource
    - TFDGUIxWaitCursor
    - TDBGrid
    - TFDQuery (FDQuery3 : elle fait le update)

    il y a des TButton:

    - Bouton qui met le row en édition : FDQuery1.Edit;
    - Bouton qui lance le Update : FDQuery3.ExecSQL;
    - Bouton 'Cancel' qui enlève le verrou : FDQuery1.Cancel;
    - Bouton 'Read' qui rafraichit le DBGrid : DBGrid1.DataSource.DataSet.Refresh;


    1- la connection :

    - autoCommit = True;
    - autoStart = True;
    - autoStop = True;
    - LockMode = pessimistic;
    - LockPoint = immediate

    - transaction démarrée ou pas = Je ne sais pas où trouver cette info

    2- La query qui popule mon TDBGrid :

    - select * from projet
    - cached updates = False

    3- La query(FDQuery3) qui fait un update (activée par un bouton)

    - ' update projet set chaine='Jacques' where id=1'

    procedure TForm1.btnQueryUpdateClick(Sender: TObject);
    begin
    FDQuery3.ExecSQL;
    end;


    Voici la trace du SQL Profiler :

    - Je me mets en édition :
    exec sp_executesql N'SET LOCK_TIMEOUT 0;
    SELECT A.chaine, A.Lettre, A.Booleen, A.UneDate, A.Nombre, A.Decimale
    FROM TESTFIREDAC.dbo.projet A WITH(ROWLOCK,UPDLOCK)
    WHERE A.id = @P1',N'@P1 int',1


    - J'effectue le UPDATE :
    exec sp_execute 2

    - J'enlève le lock :
    exec sp_execute 1

    Trigger : non il n'y a pas de trigger sur la table.

Discussions similaires

  1. [MySQL] Message d'erreur quand une requête échoue
    Par schnee dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/03/2016, 20h55
  2. [Exchange 2010] Serveur ne renvoie pas de message d'erreur quand destinataire erroné
    Par Benjyii dans le forum Exchange Server
    Réponses: 2
    Dernier message: 10/04/2013, 15h08
  3. UPDATE avec jointure ne fonctionne pas sans message d'erreur
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/01/2010, 22h22
  4. [Servlet - MySQL] Ca marche mais message d'erreur quand même
    Par ShinJava dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/11/2004, 15h15
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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