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 :

question sur le rafraichissement des données dans la base


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut question sur le rafraichissement des données dans la base
    Bonjour ,

    base attaquée : Firebird
    composant utilisé : dbexpress : TSQLConnection , TSQLQuery

    je met à jours un champ puis je remonte le champ mis à jours dans le cadre d'un test ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    DataModule2.SQLConnection1.Open;
     
       DataModule2.SQLQuery1.SQL.Clear;
       DataModule2.SQLQuery1.SQL.Add ('update employee set last_name = ''coucou4'' where  first_name =' + QuotedStr(edit2.Text));
       DataModule2.SQLQuery1.ExecSQL(false);
     
       DataModule2.SQLQuery1.SQL.Add ('select last_name from EMPLOYEE where first_name =''' + edit2.Text + '''');
       DataModule2.SQLQuery1.Open;
    edit1.Text := DataModule2.SQLQuery1.FieldByName('LAST_NAME').AsString;
     
       DataModule2.SQLQuery1.Close;
       DataModule2.SQLConnection1.Close;
    question :

    donc j'ai bien la mise à jours qui a été effectuée par contre lorsque je suis connecté à la base directement en mode commande et que je vérifie si le champ a été modifié je m'aperçois que non par contre si je me deconnecte et me reconnecte je peux voir la modification ...

    où est le souci ??

    Merci
    [/u]
    c@simir

  2. #2
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    il manque simplement le commit de la transaction (a placer après le ExecSQL).
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 63
    Points : 54
    Points
    54
    Par défaut Re: question sur le rafraichissement des données dans la bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    DataModule2.SQLConnection1.Open;
     
       DataModule2.SQLQuery1.SQL.Clear;
       DataModule2.SQLQuery1.SQL.Add ('update employee set last_name = ''coucou4'' where  first_name =' + QuotedStr(edit2.Text));
       DataModule2.SQLQuery1.ExecSQL(false);
    Jusque là ca semble correct. C'est après que ca se gate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       DataModule2.SQLQuery1.SQL.Add ('select last_name from EMPLOYEE where first_name =''' + edit2.Text + '''');
    Dans la même query tu rajoutes du code sans avoir nettoyé le précédent !
    Il manque un SQL.Clear comme tu l'a fais plus haut.
    Sinon ta requête devient :
    Text =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Update blabla..
    Select blabla...'
    A mon avis ton problème vient de là.
    Le Commit (ou CommitTrans pour les composants ADO) n'est nécessaire que si tu as fait un StartTransaction (BeginTrans pour ADO)

  4. #4
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    lper>bien je ne vois quel est la propriété qu'il me rajouter pour faire le
    commit ?


    Creenshaw>j'ai bien mis "DataModule2.SQLQuery1.SQL.Clear;" c'est juste
    que je l'ai oublié dans le copié / collé


    comme je l'avais préciser le update se fait bien puisque lorsque je déconnecte
    de la base de donnée par le mode commande et que je m'y
    reconnecte je vois bien la modification ...

    c'est juste que je suis obligé de me déconnecter de la base pour
    visualiser la modification apporté par l'interface alors que par
    l'interface elle est instantannée ...
    c@simir

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 897
    Points : 6 024
    Points
    6 024
    Par défaut
    Dans les propriétés de ton Tsql, regarde la Transaction et donne nous les valeurs ...?

    Pour ton info, et pour les problèmes relatifs à FireBird (ce qui semble être les cas) il y a 1 forum dédié à Interbase & Firebird.

    Tu pourras à bon compte parcourir les différents posts.

    Le grand maitre Barbibulle explique bien les choses par exemple :http://www.developpez.net/forums/viewtopic.php?t=342603
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  6. #6
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    ... je ne vois pas dans les propriétés du composant TSQLQuery la propriété Transaction ou quelque chose de similaire ?

    j'ai donc cherché dans l'aide et la seul notion de transaction s'est "TransactionLevel" ... s'agirait-il de cette propriété là ?
    c@simir

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Dans un de mes projets, le composant TSQLConnection relié à une base ORACLE a une propriété Params qui contient un certain nombre de couples propriété / valeurs dont Oracle TransIsolation qui est à ReadCommited

    Pour un autre projet connecté à une base InterBase, j'utilise un composant TIBTransaction.

    Si tu n'es dans aucune de ses config, essayes dans une requête SQL : je sais que çà marche car ça m'a permis de résoudre certains problèmes (mais ce n'est peut être pas très propre ?).
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  8. #8
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    j'ai lu le post à l'adresse http://www.developpez.net/forums/viewtopic.php?t=342603

    mais la personne à prioris a une mise à jours de ses données trés aléatoire ...

    pour mon cas la mise à jours semble bien se faire seulement elle ne peut se voir dans la base que lorsque je me déconnectée de cette dernière (je parle en mode commande )

    donc la transaction semble bien commitée .. mais je n'arrive pas à expliquer pourquoi dans le cas du select en mode commande ne fait pas apparaitre la modification et qu'il me faut alors me reconnecter ?
    c@simir

  9. #9
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    je continus à creuser sur le problème ... j'ai tenté un petit test cette fois je passe en mode commande ici sous DOS et je me connecte à firebird et j'essaie de faire un update ... evidemment je ne peux le faire car pour le programme il y a déjà une transaction en cours qui bloque ...

    donc le problème vient vraiement du composant TSQLQuery pour lequel je n'arrive pas à comprendre comment je peux libérer cette transaction puisque même en fermant le programme delphi cela ne débloque pas la transaction mais pourtant le champ est bien mis à jours puisque je peux le vérifier lorsque je me reconnecte à la base en mode commande ...
    c@simir

Discussions similaires

  1. Aide sur la methode d'insertion des données dans la base
    Par devalender dans le forum MkFramework
    Réponses: 17
    Dernier message: 17/09/2015, 12h53
  2. Réponses: 4
    Dernier message: 08/03/2011, 10h01
  3. [C#]Conseil sur le rafraichissement des données
    Par aityahia dans le forum Accès aux données
    Réponses: 2
    Dernier message: 29/08/2008, 19h34
  4. Question sur la sélection de donnée dans une base
    Par Masmeta dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/04/2008, 17h16
  5. Réponses: 4
    Dernier message: 11/02/2008, 23h42

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