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 :

[IBX] migration paradox vers firebird : Comment fonctionne TIBTable ?


Sujet :

Bases de données Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut [IBX] migration paradox vers firebird : Comment fonctionne TIBTable ?
    Salut,

    Je suis en train de réaliser une migration de paradox vers firebird.
    Le projet étant relativement important et les class d'accès aux données étant dérivés, je souhaiterais remplacer le TDbf (hérité de TDataSet) par un composant similaire des composants IBX soit le TIBTable.

    Le but étant de modifier la class d'accès et non pas les appels a celle ci.

    Cependant je n'arrive pas à en comprendre le fonctionnement.

    En effet, j'associe à mon TIBDataBase un TIBtransaction.

    - Si je ne précise pas de manière explicite l'utilisation de la transaction, le logiciel fonctionne mais les données ne sont pas stocker physiquement dans la base de données(si je redémarre le logiciel, les modifications n'ont pas été pris en compte)... C'est normal me direz vous.

    - Mais si j'utilise la transaction de manière explicite, j'obtiens une erreur me spécifiant sous la forme "matable : champs 'MonChampsavecCléPrimaire' non trouvé" alors que ce champs est bien présent dans la table.

    Le top serait de pouvoir définir l'état de la transaction dans les événements du TIBTable.

    J'ai cherché un peu partout mais je n'ai rien trouvé

    Je souhaiterais donc savoir si quelqu'un a déjà pratiqué ce type de mirgration.
    Ou si quelqu'un avait un exemple d'utilisation de TIBTable sous la main.

    Merci d'avance.

    PS : Je précise que la conception du logiciel actuel ne permet pas facilement la mise en place de requete SQL. L'interrogation des données se fait via les TTables (cela nécessiterais beaucoup de temps pour changer l'accès). Il faudrait donc dans le cas d'accès via requete SQL faire un pont entre le TIBSQL et le TIBTable...
    CV :
    - LinkedIn
    - Viadeo

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Avec Firebird, pour "m'oblier" de les transactions, je travaille avec ClientDataSet + DataSetPrivider + TFIBDataSet (ou TIBDataSet avec les IBX). J'ai configuré la transaction avec:

    * TimeOutAction = TACommit
    * TimeOut = 1
    * Active = false
    * Params:
    write
    nowait
    rec_version

    Quand je veux faire un ApplyUpdates du CDS je fais comme ça (dsData c'est mon TFIBDataSet)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      if not Self.dsData.Transaction.InTransaction then
        Self.dsData.Transaction.StartTransaction;
     
      Self.CDS.ApplyUpdates(0);
     
      if Err = 0 then
        Self.dsData.Transaction.Commit
      else
        Self.dsData.Transaction.Rollback;
     
      Self.CDS.Refresh;
    Comme ça je n'ai aucum problème (bon, j'ai fait un petit résume de la fonction)

    A+

  3. #3
    Membre averti Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Points : 392
    Points
    392
    Par défaut
    - Mais si j'utilise la transaction de manière explicite, j'obtiens une erreur me spécifiant sous la forme "matable : champs 'MonChampsavecCléPrimaire' non trouvé" alors que ce champs est bien présent dans la table.
    Justement, de quelle façon tu utilise le TIBTransaction et l'erreur mentionnée se déclare à quel moment exactement ?
    ....................................................................
    Aidez-vous... Dieu vous aideras et nous aussi..
    ....................................................................

  4. #4
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Alors la raison pour laquelle j'avais l'erreur semblerait etre le fait d'avoir mes Edit, Insert et Post à l'intérieur de la transaction. Je n'aurais jamais imaginé que cela pouvait venir de là...

    Cela semble mieux marcher avec la méthode de cadetill

    J'ai retiré le Refresh car j'ai activé le mode ForcedRefresh.

    Voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    procedure DoApplyTable;
    begin
      try
        if not MaTable.Transaction.InTransaction then
          MaTable.Transaction.StartTransaction;
     
        MaTable.ApplyUpdates;
     
        MaTable.Transaction.Commit;
     
        if not(MaTable.Active) then
          MaTable.Active:=True;
     
      except
        MaTable.Transaction.Rollback;
     
        if not(MaTable.Active) then
          MaTable.Active:=True;
     
        raise;
      end;
     
    end;
    Et j'ai rajouté un appel a cette fonction dans les événements AfterDelete, AfterPost et AfterCancel de mon composant IBTable.


    Merci a tous pour votre aide

    PS : vivement que je passe à un système de requete...
    CV :
    - LinkedIn
    - Viadeo

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

Discussions similaires

  1. Migration Oracle vers Firebird, avis?
    Par sat83 dans le forum Migration
    Réponses: 11
    Dernier message: 18/07/2012, 15h58
  2. Probleme Migration Paradox vers Firebird 2.x
    Par tarbala dans le forum Migration
    Réponses: 1
    Dernier message: 12/11/2010, 09h39
  3. [EJB3 Entity] Migration MySQL vers Firebird
    Par Mister Nono dans le forum Java EE
    Réponses: 0
    Dernier message: 23/12/2008, 19h51
  4. Migration Oracle vers fireBird
    Par ensisoft dans le forum Firebird
    Réponses: 4
    Dernier message: 08/10/2007, 22h54
  5. Migration Paradox vers Firebird 1.5
    Par breiz35 dans le forum Débuter
    Réponses: 11
    Dernier message: 15/03/2006, 12h06

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