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

 Firebird Discussion :

conflit d'accés reseau


Sujet :

Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut conflit d'accés reseau
    Bonjour à tous,

    j'ai une application spéciale supérette jusqu’à la sur un seul poste qui marche très bien.

    mais pour les besoins d'agrandissement d'autre poste on été crée, ce qui implique conversion réseau. j'ai installé firebird sur les 5 poste clients en tant que "serveur client" et dans le poste principale autant qu’administrateur. jusqu’à la tout est ok. le problème c'est l’incrémentation des N° ticket. si 2 poste essaye d'incrementer en meme temps ca bloque malgre que j'ai bien installer firebird(client-serveur).
    voici le code utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       with tab do  //tab=composant d acce tibquery.
       begin
               sql.strings[0]:='select numero from ticket order by numero';
               open;last;
               i:=fielbyname('numero').asinteger+1;
       ///maitenant sauvegarde du nouveau numero
              sql.strings[0]:='update  ticket set numero='+inttostr(i);
              execsql;
              transaction.commit;
    ///et ça bloque
    merci .

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Voilà à quoi servent les générateurs voire même l'ajout d'un trigger ! je ne parlerais pas des applications multi-tiers !

    sans générateur déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       sql.strings[0]:='select numero from ticket order by numero';
        open;last;
        i:=fielbyname('numero').asinteger+1;
    ce code aurait avantageusement été remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       sql.Text:='select Max(numero)+1 from ticket';
       open;
        i:=fielbyname('numero').asinteger;
      close; // qu'il manquait
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.text:='select first 1 numero+1 from ticket order by numero desc';
    Ensuite , le UPDATE , alors là c'est étrange , selon votre code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.strings[0]:='update  ticket set numero='+inttostr(i);
    cela voudrait dire que votre table TICKET ne contient qu'un seul enregistrement (dans ce cas , à quoi sert le order by, le open+last), sinon vous modifiez tous les enregistrements !

    bref et heureusement
    ///et ça bloque
    une description de la table TICKET s'impose !

    considérons maintenant l'emploi d'un générateur , Barbibulle en a donné les principes ici
    note : depuis Firebird 2.0 on parle aussi de SEQUENCE

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE MESTICKETS;

    on obtient alors facilement un nouveau numéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL.Text:='SELECT GEN_ID(MESTICKETS,1) AS NUMERO FROM 
    RDB$DATABASE';
    open;
    i:=fielbyname('numero').asinteger;
    close; 
    // il faut m'expliquer le UPDATE car là je pense qu'il y a erreur d'analyse
    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
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    merci pour ta réponse, je m'excuse je me suis trompé,voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH tab do  //tab=composant d acce tibquery.
       begin
               sql.strings[0]:='select numero from ticket';///ticket contient une seule ligne
               open;
               i:=fielbyname('numero').asinteger+1;
       ///maitenant sauvegarde du nouveau numero
              sql.strings[0]:='update  ticket set numero='+inttostr(i);
              execsql;
              transaction.commit;
    ///et ça bloque

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    un simple
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TICKET SET NUMERO=NUMERO+1
    ferait la même chose

    mais un générateur serait mieux
    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

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    c'est u niveau de update que ça bloque.j'ai testé le generateur ça marche trés bien j'ai ajouté un controle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ven.recordcount>0 then
    begin
            reseau.sql.strings[0]:='SELECT GEN_ID(TICKET,1) AS NUMERO FROM 
           RDB$DATABASE';
           reseau.open;
          ven.sql.strings[0]:='select * from ven where       
          ticket='+reseau.fieldbyname('numero').asstring;
          ven.open;reseau.close;
    end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/08/2008, 09h45
  2. [Oracle] [Conception] Conflits d'accès php
    Par arti2004 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/07/2007, 16h38
  3. [EasyPHP] probleme acces reseau
    Par elghadi_mohamed dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 13/04/2007, 09h53
  4. Accès réseau à distance
    Par texas2607 dans le forum Windows XP
    Réponses: 3
    Dernier message: 21/11/2006, 10h23
  5. gestion des conflits d'acces
    Par imedg dans le forum Oracle
    Réponses: 1
    Dernier message: 07/05/2006, 21h05

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