OVH Cloud OVH Cloud

Configuration multiple HyperFile C/S et Hyperfile Classic

38 réponses
Avatar
Vincent
Bonjour,

J'ai une appli basée sur Hyperfile classic.
Pour certain client, je dois migrer en HF C/S. Est-ce que dans ce cas,
Mon appli peut choisir au lancement entre une connexion HF classic ou
une connexion HF C/S, pour ne pas imposer au client existant
l'installation du serveur Manta ?

Je ne veux surtout pas avoir 2 versions à maintenir.

10 réponses

1 2 3 4
Avatar
mat
Vincent wrote:
Bonjour,

J'ai une appli basée sur Hyperfile classic.
Pour certain client, je dois migrer en HF C/S. Est-ce que dans ce cas,
Mon appli peut choisir au lancement entre une connexion HF classic ou
une connexion HF C/S, pour ne pas imposer au client existant
l'installation du serveur Manta ?

Je ne veux surtout pas avoir 2 versions à maintenir.




Bonjour,

Quote+++
Newsgroups: fr.comp.developpement.agl.windev
From: mat - Find messages by this author
Date: Tue, 08 Nov 2005 13:37:56 +0100
Local: Tues, Nov 8 2005 1:37 pm
Subject: Re: [WD9] Problème SQL
Reply | Reply to Author | Forward | Print | Individual Message | Show
original | Report Abuse

mat wrote:

>> WD8 WD9
>> Requête originale 13s. plante
>> Requête modifié (avec
>> présélection) 32s. 13s.

> WD8 WD9
> Requête originale 23s. plante
> Requête modifié (avec
> présélection) 32s. 13s.

encore une observation...

sous HF C/S la requête passe maintenant aussi, mais prend 29 secondes...
confirmation que tout ce qui est bon pour accélérer HF Classic est
mauvais pour HF C/S. Remplacer la boucle POUR TOUS maRequete, pour
supprimer les enregistrements avec valeur zéro, par une requête DELETE
ne fait pas de différence. En fait ça augmente le temps d'exécution de
2.7 à 3.5 secondes jusque là. Par contre, la boucle POUR TOUT qui suit
la requête principale pour chercher les libellés dans plusieurs fichiers
et faire des calculs conditionnels prend 26 secondes. Donc le moment
qu'on traite plusieurs fichiers à la fois, les deux systèmes sont
peut-être compatibles mais simplement pas utilisable avec le même code.
A mon avis, contrairement à l'impression donné par PCSoft, c'est une
illusion vouloir faire une application unique qui marche correctement
pour les deux systèmes de fichier HF, justement à cause des failles des
requêtes sous HF Classic.
Unquote+++

Salutations
mat
Avatar
Vincent
mat a écrit :
Vincent wrote:

Bonjour,

J'ai une appli basée sur Hyperfile classic.
Pour certain client, je dois migrer en HF C/S. Est-ce que dans ce cas,
Mon appli peut choisir au lancement entre une connexion HF classic ou
une connexion HF C/S, pour ne pas imposer au client existant
l'installation du serveur Manta ?

Je ne veux surtout pas avoir 2 versions à maintenir.





Bonjour,

Quote+++
Newsgroups: fr.comp.developpement.agl.windev
From: mat - Find messages by this author
Date: Tue, 08 Nov 2005 13:37:56 +0100
Local: Tues, Nov 8 2005 1:37 pm
Subject: Re: [WD9] Problème SQL
Reply | Reply to Author | Forward | Print | Individual Message | Show
original | Report Abuse

mat wrote:

WD8 WD9
Requête originale 13s. plante
Requête modifié (avec
présélection) 32s. 13s.





WD8 WD9
Requête originale 23s. plante
Requête modifié (avec
présélection) 32s. 13s.



encore une observation...

sous HF C/S la requête passe maintenant aussi, mais prend 29 secondes...
confirmation que tout ce qui est bon pour accélérer HF Classic est
mauvais pour HF C/S. Remplacer la boucle POUR TOUS maRequete, pour
supprimer les enregistrements avec valeur zéro, par une requête DELETE
ne fait pas de différence. En fait ça augmente le temps d'exécution de
2.7 à 3.5 secondes jusque là. Par contre, la boucle POUR TOUT qui suit
la requête principale pour chercher les libellés dans plusieurs fichiers
et faire des calculs conditionnels prend 26 secondes. Donc le moment
qu'on traite plusieurs fichiers à la fois, les deux systèmes sont
peut-être compatibles mais simplement pas utilisable avec le même code.
A mon avis, contrairement à l'impression donné par PCSoft, c'est une
illusion vouloir faire une application unique qui marche correctement
pour les deux systèmes de fichier HF, justement à cause des failles des
requêtes sous HF Classic.
Unquote+++

Salutations
mat





Donc comme je suis obligé d'avoir une version C/S. je passe en
utilisation de HF C/S uniquement et adaptation du code pour des temps
efficaces.

<TROLL ON>
Vive le développement rapide avec WD !
<TROLL OFF>
Avatar
mat
Vincent wrote:






Donc comme je suis obligé d'avoir une version C/S. je passe en
utilisation de HF C/S uniquement et adaptation du code pour des temps
efficaces.




Si le code se base sur des requêtes, il y a probablement une solution
donnant une performance acceptable avec les deux: celle des sources de
données. Un participant du forum anglais avait mentionnée que les vues
marchaient assez bien. Or, selon tous ce que j'ai appris sur le sujet,
une vue correspond techniquement à une requête. Mais, la différence est
qu'une vue se fait sur un seul fichier ou sur une autre vue qui est une
source de donnée. En fait, sous HF Classic deux à quatre sous-requêtes
sur les résultats de requêtes monofichier (dans leur propre sources de
données) sont beaucoup plus rapides qu'une seule requête avec jointure.
C'est beaucoup plus lourd à gérer, mais c'est une solution buvable par
les deux systèmes HF Classic et C/S.

Si par contre le code se base surtout sur HLit... alors je ne sais pas
car je pense chaque commande est traduite en requête.
Avatar
Vincent
mat a écrit :


Si par contre le code se base surtout sur HLit... alors je ne sais pas
car je pense chaque commande est traduite en requête.



C'est le cas, bcp de HLitrecherche,HFiltre, Tres peu de vue et de requête.

Si l'utilisation de requête avec des GROUp BY, et des SUM ou COUNT avait
été possible dès le début (Source en 5.5), ca aurait évité c'est
filtrage manuel en cascade et l'ajout de clé en double dans les fichiers
détails pour optimiser les accès.

Fichier A -> Fichier B (+ clé étrangére idB) -> Fichier C (Clé étrangére
idA,idB)

Je viens de découvrir un autre pb.
Il y a certain fichier dans l'analyse que servent de fichier temporaire
pour des états. un HsubstRep les remappait dans le dossier TEMP du PC.

Quand je passe en client serveur, c fichier sont recherché sur le
serveur => pb si plusieur utilisateur travaillent en même tps

Peux t'on uniquement pour certain fichier, continuer à les utiliser en
HF classic et en local ? (le tps de transformer tout ça)
Avatar
mat
Vincent wrote:
...
Je viens de découvrir un autre pb.
Il y a certain fichier dans l'analyse que servent de fichier temporaire
pour des états. un HsubstRep les remappait dans le dossier TEMP du PC.

Quand je passe en client serveur, c fichier sont recherché sur le
serveur => pb si plusieur utilisateur travaillent en même tps

Peux t'on uniquement pour certain fichier, continuer à les utiliser en
HF classic et en local ? (le tps de transformer tout ça)




J'ai le même prob. J'était incapable de faire ceci sous HF C/S :-(
Surement, ça doit être possible d'écrire sur le poste local? Mais
comment? Le contournement que j'ai mis en place est d'ajouter le nom
d'utilisateur et un numéro au nom de fichier. Donc, mon FicTmp devient
FicTmpMN1.. et comme cela est de nouveau unique.
Avatar
Vincent
mat a écrit :
Vincent wrote:
....

Je viens de découvrir un autre pb.
Il y a certain fichier dans l'analyse que servent de fichier temporaire
pour des états. un HsubstRep les remappait dans le dossier TEMP du PC.

Quand je passe en client serveur, c fichier sont recherché sur le
serveur => pb si plusieur utilisateur travaillent en même tps

Peux t'on uniquement pour certain fichier, continuer à les utiliser en
HF classic et en local ? (le tps de transformer tout ça)




J'ai le même prob. J'était incapable de faire ceci sous HF C/S :-(
Surement, ça doit être possible d'écrire sur le poste local? Mais
comment? Le contournement que j'ai mis en place est d'ajouter le nom
d'utilisateur et un numéro au nom de fichier. Donc, mon FicTmp devient
FicTmpMN1.. et comme cela est de nouveau unique.



Je vais prendre ce principe.
Tu utilise bien HchangeNom ?
Avatar
mat
Vincent wrote:
Je vais prendre ce principe.
Tu utilise bien HchangeNom ?



voilà ce que je fais:


PROCEDURE CreateTempFile()
vNum est entier = 1
vTempFile = "InvStat_Temp"+oUser:cUserLogin // INCLUDING PATH
vTempFileName est chaîne = vTempFile // needed for handling HF,
WITHOUT PATH
SI PAS vClientServer ALORS
// cannot use explicit path
SI fRépertoireTemp() <> "" ALORS
// Windows temp path is set, if hChangeDir not successful, file will
be created in current directory
SI HChangeRep(InvStat, fRépertoireTemp) ALORS
vTempFile = fRépertoireTemp()+vTempFile // complete file name for
later deletion
FIN
FIN
TANTQUE Vrai
TANTQUE fRep(vTempFile + vNum + ".FIC", frFichier) <> ""
// file name is used, add 1 to counter
vNum ++
FIN
fRep("")
SORTIR
FIN
FIN
vTempFile += vNum // file name is now unique
vTempFileName += vNum
SI PAS HChangeNom(InvStat,vTempFileName) ALORS
Erreur("winStatistics, temp file not created") ; RENVOYER Faux
FIN
HCreation(InvStat)
RENVOYER Vrai
Avatar
Arnaud Trotignon
Vincent a écrit :
isateur travaillent en même tps

Peux t'on uniquement pour certain fichier, continuer à les utiliser en
HF classic et en local ? (le tps de transformer tout ça)



Sans Pb, on le fait.

Utilises Hchangeconnexion.

Quand à l'utilisation au choix sur HF Classic ou HF C/S, nous avons implémenté cette possibilité
sans grosses difficultés dans nos applis. Nous n'avons pas changé le source dans toute l'appli, mais
juste les procédure de connexion aux bases, et c tout bon...

On a juste rencontré un pb aujourd'hui non résolu : un hbloquefichier ne marche pas toujours en HF
C/S (plantage systématique chez nous, mais pas sur toutes les bases client), ce qui peut être assez
gênant. Dans notre cas, il s'agissait juste d'une routine de migration, donc utilisée une fois...
Nous nous en sommes passé, en faisant attention en clientèle.

Honnêtement , charge pour passer en C/S sans transformation du code = 0.5 j.h

Ah! si ! J'oubliais ! ... Nous avions énormément de vues dans le produit... En fait, nous utilisions
systématiquement les vues pour n'importe quelle requête, c'était beaucoup plus rapide. Seulement
voilà, les hfusionnevue en mode jointure ne fonctionnent pas en HF C/S !!! On a donc été obligé de
tout revoir sous forme de requête. On a un peu perdu en rapidité, mais curieusement, on a gagné en
stabilité : Des clients sous TSE avaient régulièrement des plantages bien gras genre 'ACCESS
VIOLATION' sur des création de vues en jointure dans des stats... Ceux-cis ont, semble-t-il,
totalement disparus !

Ca, ca a été un peu plus de boulot : 3 j.h pour environ 30 requêtes sérieusement compliquées (comme
quoi, finalement, y avait bien un peu de boulot ;-) )
Avatar
Arnaud Trotignon
Arnaud Trotignon a écrit :

Quand à l'utilisation au choix sur HF Classic ou HF C/S, nous avons
implémenté cette possibilité sans grosses difficultés dans nos applis.
Nous n'avons pas changé le source dans toute l'appli, mais juste les
procédure de connexion aux bases, et c tout bon...



Juste une précision : Le truc, pour gérer la double possibilité de connexion, c'est de garder
l'analyse en mode Classic, et de gérer une connexion C/S avec HdecritConnexion, puis les
HOuvreConnexion, et hchangeconnexion.

Tiens, voilà le bout de source que j'utilise:

SI ModeClientServeur ALORS // Si on est en mode C/S

// On crée la connexion
SI
HDécritConnexion(MaConnexionCS,HFCS_NomUtil,HFCS_PassWord,HFCS_IPServeur,HFCS_NomBase,hAccèsHFClientServeur)
ALORS

// Connexion au serveur HF C/S
SI PAS HOuvreConnexion(MaConnexionCS) ALORS
Erreur(HErreurInfo())
SINON

// On passe l'ensemble des fichiers de l'analyse sur la connexion C/S
HChangeConnexion("*",MaConnexionCS)
// on annule cette connexion sur les fichiers locaux
HChangeConnexion(P_DocStd,"")
HChangeConnexion(stock,"")
HChangeConnexion(pros,"")
HChangeConnexion(photos,"")

FIN

SINON
Erreur(HErreurInfo())
FIN

SINON
// mode Classic : on parametre juste le répertoire des données
HSubstRep("?",RepBdd)

FIN
Avatar
mat
Arnaud Trotignon wrote:
...
Tiens, voilà le bout de source que j'utilise:

SI ModeClientServeur ALORS // Si on est en mode C/S

// On crée la connexion
SI
HDécritConnexion(MaConnexionCS,HFCS_NomUtil,HFCS_PassWord,HFCS_IPServeur,HFCS_NomBase,hAccèsHFClientServeur)
ALORS

// Connexion au serveur HF C/S
SI PAS HOuvreConnexion(MaConnexionCS) ALORS
Erreur(HErreurInfo())
SINON

// On passe l'ensemble des fichiers de l'analyse sur la
connexion C/S
HChangeConnexion("*",MaConnexionCS)
// on annule cette connexion sur les fichiers locaux
HChangeConnexion(P_DocStd,"")
HChangeConnexion(stock,"")
HChangeConnexion(pros,"")
HChangeConnexion(photos,"")

FIN

SINON
Erreur(HErreurInfo())
FIN

SINON
// mode Classic : on parametre juste le répertoire des données
HSubstRep("?",RepBdd)

FIN




ok, ça ouvre le project soit en HF C/S, soit en Classic. Mais lorsqu'on
est sous HF C/S, comment créer des fichiers dans le répertoire
temporaire du poste local ? Chez moi ça n'a pas marché, et je n'ai pas
trouvé comment résoudre. Merci.
1 2 3 4