FORUMS PROFESSIONNELS
WINDEV
,
WEBDEV
et
WINDEV Mobile
Accueil
|
Messages récents
|
Connexion
|
Déconnexion
|
Français
Accueil
→
WINDEV 2024
→
HRestaureSauvegarde - Erreur 75020
HRestaureSauvegarde - Erreur 75020
Débuté par dev_compil, 31 mai 2016 16:55 - 6 réponses
Connectez-vous…
dev_compil
#1
Membre enregistré
28 messages
Popularité : +2 (2 votes)
Posté le 31 mai 2016 - 16:55
Bonjour,
Après avoir effectué une sauvegarde je tente de la restaurer par l'intruction HRestaureSauvegarde. La restauration ne peut se faire car la base serait en cours d'utilisation !
Erreur renvoyée par le serveur <127.0.0.1:5019> :
Vous ne pouvez pas procéder à la restauration de la base de données <maBase> car la connexion <MaConnexion1> ouverte depuis la machine <monposte> pour l'utilisateur <admin> utilise cette base de données.
Code erreur : 75020
Niveau : erreur non fatale (EL_ONRETURN)
Code erreur WD55 : 5020
D'après l'exemple de PCsoft
http://doc.pcsoft.fr/fr-FR/?1000020402&name=hrestauresauvegarde_fonction
l'ajout de HFermeConnexion ne change rien.
SI HFermeConnexion(MaConnexion1) = Faux ALORS
Erreur("Erreur lors de la fermeture de la connection", HErreurInfo())
RETOUR
SINON
Multitâche(100)
FIN
Le Centre de Contrôle ne liste qu'une connexion en cours (lui-même). La restauration via le Centre de Contrôle ne pose aucun problème. Le reboot du poste n'y fait rien (serveur HFSQL en local sur le poste de dev).
Le même problème se pose avec WinDev 19 et WinDev 21.
Merci pour votre aide.
Signaler
0
0
ckelvin
#2
Posté le 31 mai 2016 - 20:22
Il faut que l'application n'ouvre qu'une seule connexion vers le serveur. Cette connexion doit être sur le serveur et pas sur la base c'est a dire que le membre MaConnexion..BaseDeDonnée=""
Signaler
0
0
dev_compil
#3
Membre enregistré
28 messages
Popularité : +2 (2 votes)
Posté le 01 juin 2016 - 09:24
Merci ckelvin pour le bon tuyau.
Signaler
0
0
Baptiste Bourlet
#4
Membre enregistré
68 messages
Popularité : +4 (4 votes)
Posté le 01 juin 2016 - 16:07
Hello,
Je rebondis sur le sujet car je suis sur la même problématique ...
Je cherche à pouvoir restaurer via le code donc j'ai bien compris qu'il faut n'avoir qu'une seule connexion d'active sans préciser la BDD. Soit.
Maintenant, mon code utilise les threads automatiques ainsi que les copies du contexte HFSQL et donc, les copies de la connexion. Mon problème est le suivant : comment fermer cette connexion par programmation ?
J'ai essayé de creuser un peu dans les fonctions threads, les hfermeconnexion et direct sur google mais je trouve rien ... Quelqu'un a une piste pour éclairer ma lanterne ?
L'alternative sera un soft tiers avec une gestion de socket et là, ça m'enchante moyen ..
Merci de m'avoir lu =}
Signaler
0
0
dev_compil
#5
Membre enregistré
28 messages
Popularité : +2 (2 votes)
Posté le 01 juin 2016 - 17:36
Hi,
Il te sera impossible de restaurer une sauvegarde avec des connexions multiples sur la même base (celles des threads en cours).
Evite donc l'emploi de threads lorsque l'on doit faire une restauration. Ainsi :
- soit tu kill tous tes threads (la restauration se fera donc depuis le thread principal)
- soit tu demandes au serveur de déconnecter tous les clients connectés par un code du genre :
// Déconnection des clients connectés à la base
SI
EnModeTest
(
)
ALORS
Trace
(
HListeUtilisateurConnecté
(
MaConnexion1
)
)
HRAZClient
(
)
HClient.Base
=
MaConnexion1
..
BaseDeDonnées
HDéconnecteClient
(
MaConnexion1
,
""
,
0
)
Le risque étant une reprise automatique des connections par certaines applications clientes.
Ensuite tu peux entamer une restauration
// Se déconnecter
SI
HFermeConnexion
(
MaConnexion1
) =
Faux
ALORS
Erreur
(
"Erreur lors de la fermeture de la connection"
,
HErreurInfo
(
)
)
RETOUR
SINON
Multitâche
(
100
)
FIN
// Connection au serveur mais sans spécifier de base !!!!!
s
MaBase
=
MaConnexion1
..
BaseDeDonnées
MaConnexion1
..
Utilisateur
=
"admin"
MaConnexion1
..
MotDePasse
=
"<mot de passe>"
MaConnexion1
..
BaseDeDonnées
=
""
SI PAS
HOuvreConnexion
(
MaConnexion1
)
ALORS
Erreur
(
"Erreur de connection au serveur"
,
HErreurInfo
(
hErrComplet
)
)
RETOUR
FIN
// Restauration de la base à partir de la sauvegarde sélectionnée (Fichiers + contraintes + procédures stockées)
n
ID
=
COMBO_
svg
..
ValeurMémorisée
SI PAS
HRestaureSauvegarde
(
MaConnexion1
,
n
ID
)
ALORS
Erreur
(
"Erreur lors de la restauration de la base"
,
HErreurInfo
(
hErrComplet
)
)
VersPressePapier
(
HErreurInfo
(
hErrComplet
)
)
RETOUR
FIN
Signaler
1
0
dev_compil
#6
Membre enregistré
28 messages
Popularité : +2 (2 votes)
Posté le 01 juin 2016 - 17:59
Il est possible de demander au serveur d'interdire toute nouvelles connection sur une base par l'intruction
HInterditAccèsBaseDeDonnées
(
MaConnexion1
,
"maBase"
)
// Restautation de la base en cours ...
HFinInterditAccèsBaseDeDonnées
(
MaConnexion1
,
"maBase"
)
Signaler
1
0
Baptiste Bourlet
#7
Membre enregistré
68 messages
Popularité : +4 (4 votes)
Posté le 02 juin 2016 - 14:53
Re,
Merci d'avoir pris le temps de détailler aussi bien, c'est super clair !
Tel quel dans mon projet, ça ne fonctionne pas (thread automatique appelé toutes les secondes qui me laisse une connexion ouverte) mais je vais développer un soft tiers qui va faire le boulot en utilisant ce que tu as fait.
Merci à toi
Signaler
0
0
→ Revenir à WINDEV 2024
WINDEV 2024
WEBDEV 2024
WINDEV Mobile 2024
WINDEV (précédentes versions)
WEBDEV (précédentes versions)
WINDEV Mobile (précédentes versions)
Etats & Requêtes
Hors-sujet
Outils
Français
English
Español
Portuguesa
Fermer cette fenêtre
Type de recherche
Uniquement les sujets
Tous les messages
Période de recherche
Date indifférente
Moins d'une heure
Moins de 24 heures
Moins d'une semaine
Moins d'un mois
Moins d'un an
Annuler
Aperçu de votre message
Ajouter une image
Importer une image depuis une URL
Envoyer une image depuis un fichier de votre disque
Déposez ici un fichier ou cliquez sur "Parcourir..."
ou
Annuler
0%
WLangage
SQL
XML, HTML
JAVA, Javascript
Texte