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 :

problème de rafraîchissement des données en réseau


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 problème de rafraîchissement des données en réseau
    Bonjour à tous,

    En suivants les conseils qui m'on été donnés dans les nombreuses discussions sur ce forum et on mettant un effort considérable pour abandonner le "DBGRID" comme moyen d'insertion de données, j'ai créer une petite application complètement dédier à SQL.
    En effet je fait toutes les mise à jour sur la base de données en (insert, update, delete).
    MAIS, comme d'habitude j'ai un Problème.

    voilà j'ai installé cette application sur un réseau local avec 4 poste +serveur. j'ai installé firebird en réspectant les conseils qui m'on été donnés ici http://www.developpez.net/forums/d13...erveur-client/

    le probléme c'est qu'a chaque mise à jour de la base données dans un poste(exple:poste1), la mise à jour n'apparait pas dans les autres postes même aprés rafraichissement de la base données et pour que ça arrive il faut que le poste modificateur rafraichissie lui même les données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Ibsaisie.connected:=false;
    Ibsaisie.connected:=true;
    j'ai essayer avec la commande 'commit' mais il marche pas(signale des erreur).
    alors je sais plus

    je me permet aussi de poser une autre question sur les évènements, que j'ai déjà posé sur ce forum mais j'arrive pas à concrétiser. En effet, j'ai créer un trigger (after insert) dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      post_event('modifcation')
    mais j'ai tésté sur la base données ça ne marche pas, peut être il faut utiliser TIBevent, mais je sais pas comment l'utiliser.

    meci de me répondre (urgent)

  2. #2
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Normalement il suffit de faire un commit après chaque modification et de fermer et réouvrir le Dataset/Query sur les autres postes pour avoir les nouvelles données.
    Si vous êtes libre, choisissez le Logiciel Libre.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    Je ne sais pas si vous avez bien compris , enfin si je lis correctement ceci
    c'est qu'a chaque mise à jour de la base données dans un poste(exple:poste1),
    reprenons depuis le début :
    Normalement vous devez avoir un poste "Serveur" qui héberge la base de données . Sur ce PC l'application se connectera en local (localhost ou 127.0.0.1)
    et un certain nombre de postes 'Clients' qui auront la même application , mais qui se connecteront sur la base hébergée sur "Serveur" pour se connecter on donnera l'adresse ip du serveur , le port (3050) et le chemin (sur le "serveur") +nom de la bdd

    et pas une base sur chaque PC
    sinon il faut parler de réplication de BDD

    pour ce qui est du commit , un commit se fait sur une transaction , pas sur une BDD

    pour ce qui est des events , il faut bien évidemment utiliser un gestionnaire d'events (IBEvent) dans le programme . De plus il faut déclarer dans ce composants quels sont les events que vous voulez gérer (dans votre cas modifcation )

    Dernier point . Votre code est bien trop court pour que l'on comprenne où vous galérez

    Enfin , AMHA c'est une discussion qui concerne plus la programmation (Delphi ou autre) plutôt que Firebird . Ok , le SGBDR est Firebird , mais les composants, la programmation pour utiliser ce dernier ne concerne pas vraiment ce forum
    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

  4. #4
    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
    j'ai bien installé la base de données sur le serveur, et l'accé à partir des postes client ce fait de cette maniére:
    databasename:=192.168.1.1:C:\gestion2013\bd\SAISIE.FDB
    mais je croit que le probléme c'est le 'commit', j'arrive pas à l'utiliser dans les requette sql, il me signale des erreurs.
    Tibquery.sql.add('insert into VEN (dat,pro,des,qte) ('01/15/2013(,'0001','RAS',1425.45)');
    Tibquery.sql.add('commit');
    ////erreur signalé : commit unkown

  5. #5
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Tibquery.sql.add('insert into VEN (dat,pro,des,qte) ('01/15/2013(,'0001','RAS',1425.45)');
    Tibquery.sql.add('commit');
    C'est le composant TibQuery qui doit "commiter" la transaction.
    Si vous êtes libre, choisissez le Logiciel Libre.

  6. #6
    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 mais je crois que c'est plutot comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TIBquery.transaction.commit;

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    bonjour,

    outre le commit qui se fait effectivement sur une transaction , qu'il ne faut pas oublier de démarrer .
    le SQL est plutôt écrit à l'estime !
    'insert into VEN (dat,pro,des,qte)('01/15/2013(,'0001','RAS',1425.45)'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INT VEN(dat,pro,des,qte)
     VALUES ('01/15/2013','0001','RAS',1425.45)
    de plus préférez les requêtes paramétrées
    Code Delphi écrit à la volée : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Tibquery.sql.Text:='INSERT INTO VEN (dat,pro,des,qte) VALUES (:PDATE,:PPRO,:PDES,:DMONTANT)';
    // controlez la syntaxe de params.ByNameASxxxxxx
    // j''ai un doute sur le ByNameAsDate
    tibQuery.Params.ByNameAsdate['PDATE'] :=Date;
    tibQuery.Params.ByNameAsString['PPRO'] :='0001';
    tibQuery.Params.ByNameAsString['PDES'] :='RAS';
    tibQuery.Params.ByNameAsFloat['PQTE'] :=1425.45;
    tibQuery.Execute;
    tibQuery.Close(etmCommit);
    inspirez vous de l'exemple <RepertoireUIB>\trunk\examples\UIB\Component\DataPump
    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

  8. #8
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Citation Envoyé par chekkal Voir le message
    merci pour ta réponse mais je crois que c'est plutot comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TIBquery.transaction.commit;
    Désolé, je crois que j'ai écris trop vite et content que tu ai trouvé la solution.
    Si vous êtes libre, choisissez le Logiciel Libre.

  9. #9
    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
    @sergiomaster a parlé de
    outre le commit qui se fait effectivement sur une transaction ,
    'qu'il ne faut pas oublier de démarrer '
    ca veut dire qu avant de faire une requette il faut dabord ouvrir la transaction?, mais comment?
    comme ca?
    TIBquery.transaction.open;?
    pour qui concerne les requettes parametrés, pourquoi elles sont plus efficace que le code que j'ai posté?

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    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 029
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par chekkal Voir le message
    ça veut dire qu'avant de faire une requête il faut d'abord ouvrir la transaction?, mais comment?
    avez vous lu <uib dir>/trunk/Help.htm ?
    si j'ai indiqué cela , c'est que dépendant des propriétés du composants (autostart=false) vous serez peut être obligé de démarrer explicitement la transaction et dans ce cas là de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.Transaction.StartTransaction;
    pour qui concerne les requêtes paramétrées, pourquoi elles sont plus efficace que le code que j'ai posté?
    je n'ai jamais dit "plus efficace" , j'ai écrit préférez
    1- tout d'abord parce que en général vous utiliserez des variables
    2- ensuite parce que cela vous oblige à gérer la date sous la forme MM/JJ/YYYY, alors qu'avec un paramètre cela ce fait tout seul
    3- également pour les Floats , un FloatToStr(Valeur) peut donner selon la configuration soit un point décimal , soit une virgule
    4- enfin , pour la lisibilité dans le cas de la maintenance
    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. problème de consolidation des données
    Par iam dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/05/2006, 13h31
  2. [Dates] Problème de réaffichage des données
    Par HwRZxLc4 dans le forum Langage
    Réponses: 7
    Dernier message: 10/05/2006, 21h04
  3. Problème à l'importation des données
    Par steinfield dans le forum Access
    Réponses: 2
    Dernier message: 24/04/2006, 16h02
  4. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07
  5. Problème de rafraîchissement de données...
    Par Alain Dionne dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 21h07

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