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

Paradox Discussion :

Un Problème réseau Qui me bloque :(


Sujet :

Paradox

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut Un Problème réseau Qui me bloque :(
    Bonjour à tous,

    Si vous n'avez pas rencontrer ce genre de problème, merci de faire un petit test qui ne demande pas beaucoup du temps:

    Pour cela il nous faut deux postes: un "client" et un "serveur" :

    Environnement : Delphi / Paradox

    1- Exécuter cette procédure delphi à partir du client : (Table1 est située dans le serveur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.OpenCloseClick(Sender: TObject);
    begin
    Table1.open ;
    ShowMessage('o');
    Table1.close ;
    ShowMessage('c');
    end;
    2- Ouvrir la table (Table1) à partir du serveur.

    3- A partir du poste client couper puis rétablir le réseau.

    4- Re-exécuter la procédure TForm1.OpenCloseClick à partir du client.


    ==> L'interface client se plante

    SVP J'aimerais bien avoir des solutions techniques, et non pas des conseilles genre il faut passer à un vrai SGBD client/serveur, ....

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 347
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 347
    Points : 20 347
    Points
    20 347
    Par défaut
    Salut je risque de dire des aneries mais les bases de données Paradox ce sont des fichiers .db donc les exploiter en mode client-serveur ça me parait difficile.
    1 sous Delphi les exceptions ça se gère me semble-t-il donc il faudrait mettre une gestion d'exception pour voir les erreurs et éviter le plantage.
    2 si la BDD est mise sur un serveur il faut s'assurer des droits en admnistration côté serveur , lecture de fichier, écriture etc...

    Ceci dit concernant Paradox je doute fortement qu'on puisse mettre les fichiers sur un serveur sans problèmes.

    Citation Envoyé par sniperpro Voir le message
    SVP J'aimerais bien avoir des solutions techniques, et non pas des conseilles genre il faut passer à un vrai SGBD client/serveur, ....
    désolé mais tu te réponds à toi-même
    avec Paradox ça me parait difficile ou alors chercher un composant tout fait pour Delphi une sorte d'unité payante...

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 347
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 347
    Points : 20 347
    Points
    20 347
    Par défaut
    Citation Envoyé par sniperpro Voir le message
    1- Exécuter cette procédure delphi à partir du client : (Table1 est située dans le serveur)

    2- Ouvrir la table (Table1) à partir du serveur.

    3- A partir du poste client couper puis rétablir le réseau.

    4- Re-exécuter la procédure TForm1.OpenCloseClick à partir du client.


    ==> L'interface client se plante
    Il ne faut pas du tout procéder comme cela.Lorsque tu cliques sur la TForm le code s'exécute normalement mais les échanges réseaux ne sont pas terminés.
    Donc la solution c'est de placer la procédure d'ouverture dans un TThread et voir si la base de donnée est bien fermée.
    Il faut s'assurer des codes de retour et mettre des gestions d'exceptions.
    Mais faire ce genre de chose avec Paradox n'est pas exempts de problèmes...


    "Windows n'a pas pu sauvegarder toutes les données pour le fichier : \\nomServeur\....\....\PDOXUSERS.LCK. Les données ont été perdues"
    je crois que c'est parfaitement clair : lorsqu'on veut ouvrir une table le BDE crée un fichier temporaire certainement un fichier tampon qui est censé être sur le poste client.
    Donc le problème doit venir des droits sur le serveur d'écriture de fichiers ou bien alors le fichier .lck ne retrouve pas les références du ou des fichiers .bd correspondant(s) étant donné que les 2 fichier n'ont pas les mêmes emplacement physiques..

  4. #4
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut re
    Merci bien Mat.M , pour votre réponse c'était très utile.


    Et ben ce que j'ai constaté est que l'interface client se bloque pendant un moment (environ 4 ou 5 minutes), puis l'exécution se poursuit (les ShowMessage apparaissent ).

    Donc ce que j'ai fait est de mettre la procédure OpenClose() dans un TThread, voici le comportement de l'interface lors de l'exécution de la procédure (4 éme étape du message précédent).

    1- Les ShowMessage apparaissent normalement, pas de blocage de l'interface.

    2- Mais lorsque je quitte l'interface, elle se plante pendant un moment (les 5min qui étaient dans la première procédure) puis elle se ferme.

    Voici le code de la thread :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    unit UnitThreadTable;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, DB, DBTables;
     
    type
      ThreadTable = class(TThread)
      private
        { Déclarations privées }
        Table1 : TTable ;
        procedure OnTerminateProcedure(Sender : TObject);
      protected
        procedure Execute; override;
      public
      //tester si le thread est terminé
      ThreadTerminated : Boolean;
     
      constructor Create(ATable1 : TTable);
     
      end;
     
    implementation
     
    constructor ThreadTable.Create(ATable1 : TTable);
    begin
     
    FreeOnTerminate := True;
    inherited Create(False);
    Table1 :=ATable1;
    OnTerminate := OnTerminateProcedure;
    ThreadTerminated:=False ;
    end;
     
     
    procedure ThreadTable.Execute;
    begin
      { Placez le code du thread ici }
      Table1.close();
      ShowMessage('c');
      Table1.open();
      ShowMessage('o');
     
    end;
     
    procedure ThreadTable.OnTerminateProcedure(Sender: TObject);
    begin
    ThreadTerminated:=True;
    end;
     
    end.
    Le problème est que lors du blocage de l'interface la valeur de la variable ThreadTerminated est True .!!!!!!!

Discussions similaires

  1. Carte réseau qui se "bloque"
    Par y_zak dans le forum Réseau
    Réponses: 6
    Dernier message: 25/04/2011, 12h11
  2. problème qui me bloque
    Par gchahra dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 10/06/2008, 15h55
  3. Requête SQL qui me bloque
    Par David Guillouet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2004, 15h52
  4. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 11h07
  5. Problème réseau
    Par Trahwn dans le forum Administration
    Réponses: 6
    Dernier message: 22/10/2003, 10h05

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