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 :

[ADO] j'ai du mal a utilisé des transaction avec Access


Sujet :

Bases de données Delphi

  1. #1
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut [ADO] j'ai du mal a utilisé des transaction avec Access
    peut on utiliser les transaction de cette manière (sur deux ou trois table.)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Try
     ADoConnection.BeginTrans;
     Table1.append;
     Table.fieldByName('Champ1').value := 'bla bla';
     Table1.Post;
     
     Table2.Edit;
     Table2.('ItemCount').Value:=Table2.('ItemCount').Value+1;
     Table2.Post;
     ADoConnection.CommitTrans;
    Except
      ADoConnection.RollbackTrans;
    end;

    j'ai des problèmes lorsque je post le tous, les mises a jour ne sont prises on considération au niveau de la base de données (sur un serveur).

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par aityahia
    peut on utiliser les transaction de cette manière (sur deux ou trois table.)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Try
     ADoConnection.BeginTrans;
     Table1.append;
     Table.fieldByName('Champ1').value := 'bla bla';
     Table1.Post;
     
     Table2.Edit;
     Table2.('ItemCount').Value:=Table2.('ItemCount').Value+1;
     Table2.Post;
     ADoConnection.CommitTrans;
    Except
      ADoConnection.RollbackTrans;
    end;

    j'ai des problèmes lorsque je post le tous, les mises a jour ne sont prises on considération au niveau de la base de données (sur un serveur).
    C'est le fonctionnement normal, après comment vérifies tu que les données ne sont pas inscrites dans la base de données ?

    PS: Merci de faire un effort niveau écriture et te relires minimum (Rien que dans la signature il y a des fautes de frappes et de langages )
    Modérateur Delphi

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

  3. #3
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    merci malatar
    Quand je ferme et je réouvre ma table je trouve pas mes dernières modifications.
    le pire c'est que j'ai besoin de ces modifications car il s'agit d'une application de gestion de stock multi-utilisateur .

    pour la langue désolé, c'est la faute à l'académie française qui a mis des centaines de règle et d'exceptions, je rigole .

    PS : j'ai changé ma signature

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Alors tu as peut-être une erreur qui se déclenche lors du Commit.
    Et comme tu l'interceptes immédiatement par un RollBack, tu n'as pas de retour d'info.

    Un CommitTrans, si il résussit déclenche un évènement OnCommitTransComplete et affecte la valeur false à la propriété InTransaction.

    Mets un ShowMessage dans le OnCommitTransComplete pour t'assurer que le Commit a réussi.

    PS: A vérifier aussi que cette transaction n'est pas imbriquée dans une autre qui serait suivie d'un rollback.

    @+ Claudius

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par aityahia
    merci malatar
    Quand je ferme et je réouvre ma table je trouve pas mes dernières modifications.
    le pire c'est que j'ai besoin de ces modifications car il s'agit d'une application de gestion de stock multi-utilisateur .
    J'ai fait un bon nombre d'application de gestion de stock lors de mon ancien travail en utilisant Access et les composants ADO et je n'ai jamais eu aucun problème.
    La différence c'est que je n'utilisais jamais des composants TAdoTable (D'ailleurs une gestion de stock avec des TAdoTable ... le jour où il va y avoir beaucoup d'enregistrement = ) mais uniquement des TAdoQuery


    Citation Envoyé par aityahia
    PS : j'ai changé ma signature
    Il y en a encore une ^^ FireBird dans le lien
    Modérateur Delphi

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

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Malatar
    La différence c'est que je n'utilisais jamais des composants TAdoTable (... ) mais uniquement des TAdoQuery
    +1

    J'ai aussi abandonné l'utilisation des TxxxTable depuis longtemps.

    @+

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    j'ai changé pour des ADOQuery et j'ai eu un autre problème je l'explique:
    j'ai deux (2) ADOQuery Lier en maitre-détail.
    les clés primaire des deux tables sont des champs AutoInc.
    la clé de liaison et un Integer.

    lorsque j'ajoute un enregistrement maitre (tous va bien), mais dans le cas ou j'essaie de rajouter un enregistrement détail j'ai le message d'erreur que le "champ NUM ne peut pas être modifier" sans avoir le nom de la table qui génère l'exception.

    NB mes clé primaire sont nommé toutes les deux 'NUM'

    j'ai utilisé append et le post, j'ai fait un test avec une requete et un ADOCommand j'ai pas de problèmes sauf qu'il faut un refrech pour l'ADOQuery.

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Quel est ton SGBD ?

    A priori je dirais qu'il s'agit du champ NUM de la table enfant. Tu dois lui fournir une valeur alors que c'est un AutoInc.

    @+

  9. #9
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    ACCESS oui je pense aussi qu'il s'agit de celui de la table détail.

    le NUM est le champ clé de ma table détail le champs de référence est un Integer que je met a jour dans l'vénement OnNewRecord .
    quand je fait un Append et un post normalement l'ADOQuery génère une requete d'insertion (comme le cas des composants interbase ou on tous les requêtes distinctement) la requete tente d'éditer le NUM.

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ca fait longtemps que je n'ai pas travailler avec Access.

    Il n'y a pas une astuce pour les champs AutoInc lorsque tu utilises des champs persistents ?
    Il me semble me souvenir qu'il faut définir la propriété AutoGenerateValue du champs à arAutoInc ou arDefault.

    Je ne sais plus trop !!!

    @+

  11. #11
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Idem le problèmes persiste mais quand j'ôte la liaison Maitre-Detail le tous fonctionne (quand je met a Nil le DataSource de la table détail).

    Le Code SQL de la table détail

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM LigneSortie AS L
    WHERE (L.NumBon = :Num)

  12. #12
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    je crois savoir d'où viens mon problèmes mais reste à confirmer.

    dans l'aide de delphi je li.

    Citation Envoyé par Aide de delphi7
    DataSource property (TADOQuery)
    Specifies the data source component from which to extract current field
    values to use in same-name parameters in the ADO query’s SQL statement.


    If the SQL statement uses other than a SELECT query (such as INSERT or
    UPDATE), the parameters with the same name as fields in the other dataset
    still get values, but the query must be explicitly executed each time the other
    dataset’s record pointer moves. For example, the SQL statement below uses
    the INSERT statement and has the parameters CustNo and CompanyName:
    et vue que j'ai le champs NUM sur les deux tables alors la requete d'insertion générer pas le post Inclus le NUM qui un champs AutoInc.

    le problème c'est si je crée une autre requete d'ajout (ADOCommand) il me faut appeler un requery après chaque post, ce qui est gèle l'application.

Discussions similaires

  1. [WD-2003] Utilisé des DLLs avec les modèles.
    Par toniob44 dans le forum VBA Word
    Réponses: 12
    Dernier message: 01/06/2012, 23h08
  2. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  3. [Data] gestion des transactions avec Spring Probleme
    Par mouvma dans le forum Spring
    Réponses: 2
    Dernier message: 02/04/2008, 20h39
  4. Réponses: 2
    Dernier message: 04/07/2006, 10h26
  5. envoyer des images avec access
    Par dan664 dans le forum Access
    Réponses: 6
    Dernier message: 13/10/2005, 21h16

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