PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile (versiones precedentes) → Requêtes bloque sans erreur
Requêtes bloque sans erreur
Iniciado por Damien Cebrian, 13,abr. 2018 15:40 - No hay respuesta
Publicado el 13,abril 2018 - 15:40
Bonjour,

Je développe une application qui s'utilise en mode Online ou Offline selon le besoin.

Pour cela tous mes fichiers de l'analyse sont en mode fichier classic et au besoin je change la connexion de certains pour que l'appli aille chercher les données sur mon serveur hfsql avec la commande hchangeconnexion.

Avant chaque requête je lance une procédure qui vérifie si l'appli est en mode "Online" et connecte les fichiers à la base client/serveur.

Voici son code :
Procedure test_bdd()
SI gbArriere_plan = Faux ALORS //Si l'appli n'est pas en arrière plan
gbReconnexion_encours = Vrai
ecrit_log("FUNC test_bdd START")
SI gbMode_hors_ligne = Faux ALORS //Si l'appli est en mode "Online"
nTry est un entier = 0
Multitâche(-1)
BOUCLE(10)
SI SocketExiste("test") ALORS SocketFerme("test")
SI SocketConnecte("test",gnPORT,gsIPServeur) = Vrai ALORS //On test l'accès au port de la base
//SI InternetConnecté() = vrai alors // Si on a récupéré internet on sors de la boucle
SORTIR
FIN
nTry ++
ecrit_log("Tentative de connexion "+nTry+"/10")
Multitâche(-1)
SI nTry = 10 ALORS // Au bout de 10 essai on arrête de tester
ToastAffiche("Connexion au serveur impossible")
ecrit_log("FUNC test_bdd STOP ERR SOCKET")
gbReconnexion_encours = Faux
RENVOYER Faux
FIN
Multitâche(-400)
FIN

connexion est une chaîne
connexion = HListeConnexion(hLstOuvert)
Multitâche(-1)
SI ChaîneOccurrence(connexion,"Serveur") = 0 ALORS //Si on a pas de connexion d'ouverte pour le serveur
Multitâche(-1)
HFermeConnexion(Serveur) //On ferme une connexion au cas ou
SI HOuvreConnexion(Serveur) = Vrai ALORS
Multitâche(-1)
HChangeConnexion(garage,Serveur) //Serveur est le nom de la connexion client/serveur dans l'analyse
...
HChangeConnexion(mp,Serveur)
ecrit_log("Après : "+HListeConnexion(hLstOuvert))
ecrit_log("FUNC test_bdd STOP OK")
gbReconnexion_encours = Faux
RENVOYER Vrai
SINON
ToastAffiche("Connexion au serveur impossible")
ecrit_log("FUNC test_bdd STOP ERR - "+ErreurInfo())
gbReconnexion_encours = Faux
RENVOYER Faux
FIN
SINON //Si on était co alors on lance un hreconnecte
SI HReconnecte() = Faux ALORS ecrit_log("RECO "+ErreurInfo())
ecrit_log("FUNC test_bdd STOP RECO")
gbReconnexion_encours = Faux
RENVOYER Vrai
FIN
SINON
ecrit_log("FUNC test_bdd STOP MODE HORSLIGNE")
gbReconnexion_encours = Faux
RENVOYER Faux
FIN
FIN

CAS EXCEPTION:
ecrit_log("EXCEPTION test_bdd : "+ErreurInfo(errComplet))
gbReconnexion_encours = Faux


Tout celà fonctionne bien sauf que, quand l'application reste longtemps inactive, la fonction test_bdd fonctionne bien et le hreconnect se lance sans erreur mais a la première requête lancée l'application fige et n'affiche même pas de message d'erreur comme quoi la requête n'a pas pu être initialisée.

Voici comment je lance mes requêtes
SI HExécuteRequête(REQ_SEL_BAN_ID,hRequêteDéfaut) <> Faux ALORS
//Mon traitement
SINON
Info(HErreurInfo())
FIN


Est-ce que quelqu'un aurait une idée de pourquoi celà bloque ?