25 septembre 2008

Wlangage dans les requêtes SQL : "Vous n'êtes pas autorisé à exécuter la fonction WLangage XX dans une requête"

Les requêtes sur une base Hyper File peuvent inclure des instructions WLangage (cf billet fonction du WLangage dans une requête SQL). Par contre une erreur peut se produire lors de l'exécution, mentionnant le nom de la fonction WLangage appelée dans le code SQL :

Vous n'êtes pas autorisé à exécuter la fonction WLangage XX dans une requête

Où est le piège ... dans les droits définis sur le serveur !

Il faut donner le droit "Droit d'exécuter des procédures stockées" à l'utilisateur connecté. Sans ce droit spécifique, l'exécution d'une requête se solde par ce retour.

17 septembre 2008

Requête DECODE pour moins de code...

Je ne découvre seulement qu'aujourd'hui l'instruction SQL DECODE. C'est un intérêt du développement on en apprend tous les jours !

L'instruction SQL DECODE est très pratique, elle permet de formater une information directement dans le résultat d'une requête SQL, afin d'éviter de la programmation lors de la lecture de la requête pour présenter les données. Exemple typique d'une civilité stockée avec 1, 2 ou 3 dans une base de données, on pourra grâce à DECODE obtenir directement dans le résultat de la requête "M.", "Mme" ou "Mlle". Exemple :

SELECT
DECODE(CLIENT.Civilité ,1,'M. ',2,'Mme. ',3,'Melle ','') +' '+
CLIENT.NomClient +' '+CLIENT.PrénomClient AS NomComplet
FROM
CLIENT

16 septembre 2008

Système 32 ou 64 bits pour héberger un moteur Hyper File Client/Serveur (ou exécuter les applications) ?

"Qui peut le plus peut le moins" on peut donc être tenté de systématiquement partir sur du 64 bits ! Il n'y a cependant aucune obligation. La seule restriction incontournable d'un système 32 bits et de ne pas permettre à un processus d'allouer plus de 2 Go de RAM (indépendamment de la RAM totale). Donc ... système 64 bits obligatoire si le moteur Hyper File Client/serveur a besoin à un moment donné de plus de 2 Go de RAM pour répondre aux applications clientes qui le sollicitent. Dans tout autre cas un système 32 bits est suffisant.

Par contre attention de ne pas sous évaluer les besoins, car d'après mes constations lorsque les 2 Go disponibles en 32 bits sont alloués, il n'est pas rare que les postes clients ne reçoivent plus de réponse (ou seulement après une attente trop importante).

12 septembre 2008

Ajuster l'espace alloué pour le cache du moteur Hyper File Client/Serveur

Le centre de contrôle Hyper File permet d'indiquer la taille mémoire maximale à utiliser pour les caches.

Afin d'accélérer les accès pour de meilleures performances, on peut être tenté d'augmenter à outrance cet espace, . Mais il faut bien garder à l'esprit que l'espace donné pour le cache, limite d'autant l'espace disponible pour les autres besoins du serveur (requêtes, traitements...).

Il est donc nécessaire d'étudier en production ce qu'il se passe sur le serveur, en fonction des actions faites par les applications. En effet, en fonction des accès effectués par les applications, les caches devront être privilégiés, ou au contraire, il faudra un maximum d'espace mémoire libre pour satisfaire au plus vite les applications.

Pour cela il faut activer dans la configuration du serveur les statistiques d'activités, puis les consulter sur une période de mise en production la plus représentative possible de l'utilisation courante.

Leur visualisation sous forme de graphe permet de voir les accès (en nombre ou en octets) fait en directs sur le disque, ou dans les caches. L'opération doit être renouvelée à plusieurs reprises, en augmentant à chaque fois sensiblement l'espace des caches. Dès que l'augmentation du cache alloué ne permet plus de faire évoluer le nombre d'accès en cache de façon significative, il ne faut plus augmenter l'espace alloué au cache sous peine de limiter l'espace mémoire inutilement.

Pour une mesure précise, il faut à chaque essai de réglage de l'espace du cache consulter les statistiques d'activité sur une même période d'utilisation (même nombre d'utilisateurs, avec une même activité). Pour encore plus de précision l'observation des statistiques peut se faire sur une période ou l'application n'est exécutée que par des tests automatiques, qui permettraient d'avoir une activité constante. Personnellement, je ne suis jamais allé jusque là, la simple consultation des statistiques durant la production ayant toujours été suffisante pour se faire une bonne idée.

09 septembre 2008

Créer une copie locale pour test d'un fichier Hyper File Client/Serveur

Il n'est pas rare d'avoir besoin pour test d'une copie locale d'un fichier de données Client/Serveur en cours d'exploitation. Dans ce cas, la fonction "HCopieFichier" ne peut pas être utilisée, car elle aurait une incidence sur les blocages et accès en cours.

Le code suivant peut avantageusement être utilisé, son exécution sera transparente pour les utilisateurs.

ConnexionHFCS est une Connexion
sNomFicherHFCS est une chaîne = "PRODUITS.FIC"
sdFichierHFCS est une Source de Données
sdFichierLocal est une Source de Données
sRepLocal est une chaîne = "C:\TEMP"
sNomLocal est une chaîne = "PRODUITS"

ConnexionHFCS..Provider = hAccèsHFClientServeur
ConnexionHFCS..Utilisateur = "admin"
ConnexionHFCS..MotDePasse = ""
ConnexionHFCS..Serveur = "SRV_Data:4912"
ConnexionHFCS..BaseDeDonnées = "FACT"

HOuvreConnexion(ConnexionHFCS)
HDéclareExterne(sNomFicherHFCS,sdFichierHFCS,ConnexionHFCS)

HAlias(sdFichierHFCS, sdFichierLocal)
HChangeRep(sdFichierLocal, sRepLocal)
HChangeNom(sdFichierLocal, sNomLocal)
HCréationSiInexistant(sdFichierLocal)

POUR TOUT sdFichierHFCS

HCopieEnreg(sdFichierLocal, sdFichierHFCS, hCopieIdAuto)
HAjoute(sdFichierLocal,hForceIdAuto)

FIN

Note : en fonction des actions faites sur le fichier Client/Serveur en production, il faut compléter le traitement afin de traiter les cas d'erreur.

08 septembre 2008

Comparer deux enregistrements d'une table décrite dans l'analyse ...

Le WLangage n'a pas de fonction permettant de savoir si deux enregistrements d'un même fichier, ou de deux fichiers différents mais de même structure, sont identiques. Pour effectuer une telle comparaison, sans tester l'égalité entre toutes les rubriques, il est possible d'utiliser une fonction spécifique :

HRécupèreEnregistrement(...)
Cette dernière permet en effet d'avoir le contenu complet d'un enregistrement dans une variable chaîne de caractères. Il suffit donc de l'utiliser sur les enregistrements à comparer, puis de comparer les chaînes obtenues.