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 :

Certaines valeurs ont peut-être changé depuis leur dernière lecture


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut Certaines valeurs ont peut-être changé depuis leur dernière lecture
    bonjour,
    j'ai un programme Client / Serveur qu'est utilise une base de donnée SQL Server,
    j'ai de temps en temps ce message d'erreur "La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture"
    je cherche à trouvé une solution à ca ou comment je peut faire suivi d’exception global pour évité ce message
    merci d’avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Tu dois avoir un problème de clé, normalement une ligne est identifié par sa clé primaire, qui ne doit pas être modifé par la suite (du moins sans s'exposer à un des gros soucis selon les bases), en général c'est un Entier Auto-Incrémenté (Trigger)

    Utilises-tu des transactions pour englober un ensemble de modification ? Si oui, une transaction doit être ouverte et refermer dans de court délai, sans attendre d'intervention humaine (donc après la saisie)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu dois avoir un problème de clé, normalement une ligne est identifié par sa clé primaire, qui ne doit pas être modifé par la suite (du moins sans s'exposer à un des gros soucis selon les bases), en général c'est un Entier Auto-Incrémenté (Trigger)

    Utilises-tu des transactions pour englober un ensemble de modification ? Si oui, une transaction doit être ouverte et refermer dans de court délai, sans attendre d'intervention humaine (donc après la saisie)
    je n'utilise pas des transactions, j'ai utilise ADOTable sans transactions

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par salimdz Voir le message
    je n'utilise pas des transactions, j'ai utilise ADOTable sans transactions
    utlise plutot adodataset et comme ta dit ShaiLeTroll soit tu n'as pas un index primére soit que ton index utilise plus d'un champs (modfiable)
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par edam Voir le message
    utlise plutot adodataset et comme ta dit ShaiLeTroll soit tu n'as pas un index primére soit que ton index utilise plus d'un champs (modfiable)
    merci pour votre réponse,
    je doit change tous mes ADOTable avec des ADODataSet
    c'est vrai mon index utilise plusieurs champs modifiable

  6. #6
    Membre actif Avatar de hmhm12
    Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 258
    Points : 297
    Points
    297
    Par défaut
    j ai rencontre ce pb avec les ADO,
    la solution que j ai fait est ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    adotable1.active=false;adotable1.active=true;

  7. #7
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    salut,
    j'ai changer le type de verrou à pessimiste dans ADOTable
    mais il faut un peut de temps pour voir les résultats

  8. #8
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par hmhm12 Voir le message
    j ai rencontre ce pb avec les ADO,
    la solution que j ai fait est ;
    adotable1.active=false;adotable1.active=true;
    merci, pour votre réponse,
    j'ai pas essayer cette solution, mais t'ajoute au c'est ligne de code

  9. #9
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    Mettez locktype à ltBatchOptimistic l'erreur ne s'affiche plus, mais un autre probleme se pose; le post à l'air de bien marcher mais il ecrit rien ds la table, à l'ecran ca à l'air de passer mais en vrai rien ne se fait. Een tout cas parapport à MYDAC c le jour et la nuit
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  10. #10
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    je vous signale que j'utilise Delphi2007 update3 et ADO mais avec MYDAC j'utilise mon vieux Delphi7. A l'occasion y a il qqn qui a Mydac pour Delphi2007
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  11. #11
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par colfire_dev Voir le message
    Mettez locktype à ltBatchOptimistic l'erreur ne s'affiche plus, mais un autre probleme se pose; le post à l'air de bien marcher mais il ecrit rien ds la table, à l'ecran ca à l'air de passer mais en vrai rien ne se fait.
    Comme ca il y a un problème la perte des données, mais ça très c’est grave

  12. #12
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par salimdz Voir le message
    salut,
    j'ai changer le type de verrou à pessimiste dans ADOTable
    mais il faut un peut de temps pour voir les résultats
    salut
    la solution n’a pas marche (type de verrou à pessimiste),
    le programme il se bloque le temps qu’un 2 poste veux l’exécuté

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour, il parait que j’arrive en retard, bon… désolé

    J’ai remarqué que ce genre d’erreurs ne se pose généralement-que si on utilise des champs Auto-incrément.

    Le jeu d'enregistrements ADO conserve une copie des valeurs origines qui ont été retournés à partir de la base de données. Lorsque le client met à jour des enregistrements déconnecté localement, la valeur est modifiée et la valeur origine reste inchangée, pour refléter la valeur qui a été à l'origine dans la base de données… bla bla bla

    En résumer le problème situé au niveau de la propriété CursorLocation mettez la clUseServer et les valeur se mettre a jours après chaque déplacement dans votre TDataSet.
    Si vous êtes obligez d’utiliser clUseClient, alors il faut faire un MAJ pour votre TDataSet pour que les données soient…, comme ceci:
    Il faut juste choisissez le bon évenement pour ce ci, comme BeforeScroll par exemple.
    Pour plus d’info visiter :
    http://support.microsoft.com/kb/q193515/
    Bonne continuation.
    Cordialement Kachwahed.

  14. #14
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    merci pour cette réponse
    je doit essayer pour voir

  15. #15
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Il faudrait quand même savoir quelle opération tu fais sur la table. (A moins que je sois je l'ai pas vue...)

    Généralement cette erreur proviens lorsqu'on cherche à ajouter un enregistrement et que l'on essai d'écrire sur le champs AUTOIncrement, ou que l'on essai de mettre à jour (modifier) ce champs.

    Il faut pas y toucher, si tu créer un nouvel enregistrement ne renseigne pas ce champs cela se fera tout seul.

    J'espère que cette piste t'aidera.

  16. #16
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    merci,
    le problème il déclenche le temps qu'il y a plusieurs clients utilisent le même enregistrements

  17. #17
    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
    Citation Envoyé par salimdz Voir le message
    merci,
    le problème il déclenche le temps qu'il y a plusieurs clients utilisent le même enregistrements
    et comment fais-tu dans ce cas ?
    il faut isoler les MAJ pour pouvoir les traiter. il me semble que tu laisse ça se faire tout seul donc faut s'attendre à toute sorte de bizarrerie. les transactions sont faites pour ça.

    donne une description d'une MAJ ; ajout d'une ligne par exemple avec code si possible .
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    J'ai eu le même problème une fois avec un champ dont sa valeur se génère par défaut avec SQLServer2005, j'ai résolu le problème en supprimant la valeur par défaut.

  19. #19
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    supprimant la valeur par défaut
    Si on veut préserver la valeur par défaut dans BDD, on utilise la propriété dynamique ‘Update Resync’, ça marche seulement pour avec adUseClient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.ADODataSet1AfterOpen(DataSet: TDataSet);
    begin
      TCustomADODataSet(DataSet).Recordset.Properties['Update Resync'].Value :=
        adResyncAutoIncrement + adResyncUpdates + adResyncInserts;
    end;
    en savoir plus: Update Resync Property-Dynamic (ADO)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms676738%28v=vs.85%29.aspx

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Tu as juste 2 ans de retard sur Just-Soft
    et 5 ans sur la question d'origine !
    Mais comme ta réponse est plutôt pas mal, disons que c'est une exhumation intéressante !

    une autre solution c'est de ne pas utiliser Post() du TADODataSet qui construit un WHERE absolument infâme et de faire soit même les SQL en utilisant uniquement les clés primaires !
    Tout dépend aussi de la considération de l'accès concurrentiel, ce mécanisme a pour but de protéger contre la modification à partir de données obsolètes
    Perso, je me suis jamais trop soucié de cela, c'est le dernier qui parle qui a raison !

    Sinon effectivement Recordset.Resync permet d'effectuer réconciliation !

    Nous avons discuté de cela assez récemment dans insert DBGrid avec TADOQuery et requete avec jointure
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/03/2012, 13h26
  2. Réponses: 21
    Dernier message: 31/07/2011, 18h10
  3. Réponses: 9
    Dernier message: 23/07/2009, 14h50
  4. [POO] acces a certaines valeurs depuis ma classe
    Par nabab dans le forum Langage
    Réponses: 5
    Dernier message: 10/10/2008, 18h56
  5. Réponses: 2
    Dernier message: 13/02/2007, 19h02

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