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 :

impossible d'ouvrir une fiche par utilisateur


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut impossible d'ouvrir une fiche par utilisateur
    Bonjour,
    j'ai développé une petite application il y quelques années avec Interbase 5.5 Local et Delphi. Je souhaite maintenant utiliser la même base de données sur 2 postes pour 2 utilisateurs. J'ai donc installé Firebird 1.0 (pour être le plus proche possible de Interbase 5.5) server + client sur un PC et la version client sur un autre. J'arrive donc maintenant à partir du PC client à me connecter à la base de données sur le serveur. Cependant lorsque je crée un nouvelle une fiche sur un des PC je ne peux pas en créer une nouvelle sur le deuxième PC. Il faudrait que chaque utilisateur puisse créer sa propre fiche et travailler dessus indépendamment. Lorsque je crée une deuxième instance de la fiche ( c'est le même TForm) sur le deuxième PC, celle-ci n'apparaît que lorsque je referme la première du premier PC.
    Lorsque je 'trace' le programme sur le deuxième PC, il reste bloqué sur la méthode IBTable.append (j'utilise les composants Interbase):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if not dmTables.IBTransaction1.Active then
        dmTables.IBTransaction1.StartTransaction;
     
       dmTables3.IBTtable1.Open;
      dmTables3.IBTtable1.Append; // ça bloque ici
      // traitement....
      dmTables3.IBTtable1.Post;
    que puis-je faire ?
    merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bienvenue sur le forum

    Pourquoi Firebird 1. c'est dommage de se priver de la 2.1

    pour la question , quelles sont les propriétés de la connexion et de la transaction
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    merci pour votre réponse. Voici les propiétés ci-dessous. Les propriéts 'Active' sont mises à True au démarrage.
    En fait j'ai choisi la version 1 pour être le plus proche possible de la version Interbase 5.5 que nous avons utilisé au départ. la décision n'est pas encore prise d'utiliser Firebird ou continuer avec Interbase. Mais si le problème semble venir de la version, je suis prêt à installer la version 2.

    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
    object IBDatabaseCFab: TIBDatabase
        DatabaseName = 'poste22:C:\labase\labase.GDB'
        Params.Strings = (
          'user_name=lab'
          'password=lab')
        LoginPrompt = False
        DefaultTransaction = IBTransactionCFab
        IdleTimer = 0
        SQLDialect = 1
        TraceFlags = []
        Left = 40
        Top = 8
      end
     
     object IBTransactionCFab: TIBTransaction
        Active = False
        DefaultDatabase = IBDatabaseCFab
        DefaultAction = TARollback
        Left = 40
        Top = 64
      end

  4. #4
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut backup restore
    Bonsoir

    Ce n'est pas inutile quand on change de moteur de bases données de faire un backup avant et un restore dans le nouveau moteur, avec ib expert par exemple.

    André

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    +1 mais je ne pense pas que le problème vienne de là !

    la décision n'est pas encore prise d'utiliser Firebird ou continuer avec Interbase. Mais si le problème semble venir de la version, je suis prêt à installer la version 2.
    non ce n'est pas un problème de version . Venant moi aussi de 5.5 puis 6.5 j'ai fait le choix de Firebird pour des raisons financières du point de vue entreprise et Opensource de mon coté

    Revenons a nos moutons . cela fait des annees que je n'utilise plus les IBxx mais j'ai l'impression que c'est le type de transaction qui bloque ,ce qui est bizarre c'est que tu ne l'indiques pas . (mais c'est peut être parce que j'ai perdu l'habitude des IBxx)
    un truc du genre tiReadCommitted etc...
    [Edit] je viens de me remettre dedans , je parlais donc des parametres de la transaction

    D'ailleurs ? c'est quelle version de Delphi ? 7 je présume

    un GUI firebird genre Flamerobin , ibexpert etc ... accède t'il sur les tables , enregistrements à partir des 2 postes
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  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
    Salut

    Je pense également à problème de niveau d'isolation de la transaction, car en regardant ton DFM tu n'as manifestement pas défini de TIL pour ta transaction.
    Pas bien.

    Tu devrais avoir quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     object IBTransactionCFab: TIBTransaction
        Active = False
        DefaultDatabase = IBDatabaseCFab
        DefaultAction = TARollback
        Params.Strings = (
          'read_committed'
          'rec_version'
          'nowait')
        Left = 40
        Top = 64
      end
    Dans la mesure où je ne sais pas du tout ce que sont ces Params par défaut, difficile de répondre.
    J'imagine qu'un Concurrency + wait peut te mener tout droit à un Deadlock.

    @+ Claudius

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    merci pour toutes les réponses. En fait j'utilise encore Delphi 5... J'ai bine acheté la version 2009 mais j'ai déjà eu bien du mal à mettre a jour un programme avec cette version Unicode. Cest pourquoi j'aimerai au moins avoir un programme qui marche avant d'aller plus loin.
    J'ai bine essayé le paramètres 'read_committed'
    'rec_version'
    'nowait')
    pour la transaction et le message ' lock conflict on no wait transaction deadlock' apparaît.
    Si je comprends bien il y quelques part une table qui a été modifée mais pas 'commited' et lorsque je tente d'ouvrir la fiche sur le PC client il veut écrire dans cette table ?

  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
    Salut

    Bon apparemment tes transactions sont mal gérées.

    Je te conseille donc un peu de lecture sur le sujet.
    L’isolement des transactions dans Firebird. (Firebird ou Interbase même combat )

    Cet article n'est pas très simple en première lecture mais devrait t'aider à mieux comprendre le fonctionnement des transactions et surtout corriger les mauvaises habitudes que l'on peut facilement prendre avec les IBX.

    Bonne lecture.
    @+ Claudius

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par delfinition Voir le message
    le message ' lock conflict on no wait transaction deadlock' apparaît.
    Au moins , cela pointe le problème
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour la littérature. C’est assez pointu.
    Le pense que ça m’a aidé à trouver le problème. Reste à trouver la solution. Je n’ai effectivement pas beaucoup d’expérience en bases de données multi-utilisateurs.
    Voici ce que fait le programme à l’ouverture d’un TForm Delphi :
    -Démarrage de la transaction
    -Création d’un nouvel enregistrement dans un table maître
    -Création de clé de cet enregistrement (lecture dans une autre table de la valeur, incrémentation de la valeur puis écriture dans la table de la nouvelle valeur)
    -‘Post’ de l’enregistrement maître (Tablemaitre.post)
    -L’utilisateur ajoute les enregistrements détails
    -Quand il enregistre la fiche -> commit de la transaction sinon Rollback
    En fait il me semble que ce sont des choses tout à fait habituelles. Si j’ai bien compris c’est cette lecture écriture dans la table stockant la valeur de la clé I qui bloque l’ouverture d’une deuxième fiche.
    Y a-t-il une autre solution qu’un générateur pour incrémenter les valeurs de la clé I de la table maître ?
    J’utilise beaucoup les classes TTable et quelques TQuery. Faut-il remplace tous le Table par de Tquery. Que me conseillez-vous ?
    Et encore merci pour toutes les réponses.

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Y a-t-il une autre solution qu’un générateur pour incrémenter les valeurs de la clé I de la table maître ?
    J’utilise beaucoup les classes TTable et quelques TQuery. Faut-il remplace tous le Table par de Tquery.
    1) Bien sur qu'il y a des générateurs , tu trouveras les moyens de les utiliser dans la FAQ Firebird. Tout dépend de la numérotation à mettre en place (par exemple dans le cas de commandes par saison c'est possible mais non recommandable il y a une réponse a ce sujet dans le forum Firebird)

    2) J'opte pour les TQuerys plutôt que les TTables , sauf cas exceptionnels
    de même j'essaye toujours d'indiquer les colonnes a récupérer (eviter le *)
    et de réduire la quantité de données à récupérer (WHERE) . Un bon moyen de s'en convaincre est de vérifier le trafic réseau .

    -Démarrage de la transaction
    -Création d’un nouvel enregistrement dans un table maître
    -Création de clé de cet enregistrement (lecture dans une autre table de la valeur, incrémentation de la valeur puis écriture dans la table de la nouvelle valeur)
    -‘Post’ de l’enregistrement maître (Tablemaitre.post)
    -L’utilisateur ajoute les enregistrements détails
    -Quand il enregistre la fiche -> commit de la transaction sinon Rollback
    Je fait ça régulièrement dans plusieurs modules de mon application à un différence près toutefois je commit après le post de l'enregistrement maitre. (inconvénient , il y a des "trous" dans la numérotation de la table numéros)
    En règle générale j'essaye de faire des transactions le plus court possible.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. impossible d'acceder à une application par un utilisateur
    Par hicham106 dans le forum Windows XP
    Réponses: 4
    Dernier message: 20/09/2007, 13h02
  2. Impossible d'ouvrir une base de donnée
    Par anna1 dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 22h55
  3. [C#] Impossible d ouvrir une Form
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/04/2006, 14h28
  4. autorisation et acces a une base par utilisateur
    Par azde7015 dans le forum Access
    Réponses: 1
    Dernier message: 09/02/2006, 16h08
  5. Impossible d'ouvrir une base Access depuis Excel
    Par vciofolo dans le forum Access
    Réponses: 8
    Dernier message: 14/12/2005, 12h09

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