Astuce |
---|
La base de donnée est forcément sous gestion SQL par un serveur SQL depuis les générations 7 de l’ERP et la version d’Harmony associée. Ce pilote ODBC Diva natif n’a donc aucune utilité depuis les version Harmon Harmony 400 et supérieures |
Généralités
Open Database Connectivity (ODBC) est une interface standard définie par Microsoft, permettant d'accéder à une base de données par une requête SQL.
L'interface ODBC définit les éléments suivants :
...
Pour les tables, l'import concerne toutes les tables de tous les fichiers permanents. (voir propriété fichier temporaire des objets « fichier »).
Ancre | ||||
---|---|---|---|---|
|
Tables de référence spécifiques
La personnalisation du zoom des tables d'une source permet d'ajouter un choix (au menu et dans la barre de boutons) pour accéder à une liste de tables de référence spécifiques.
Pour cela, il faut adapter le « zoom des tables de la source » pour sélectionner des tables à partir d'un fichier de modèles spécifiques en surchargeant le module zodbcTable.dhop.
La surcharge consiste à ajouter un choix d'accès au zoom des modèles spécifiques par la fonction ZoomOdbcAjouterModeles. Il est possible d'ajouter plusieurs fichiers modèles en appelant autant de fois la fonction.
Dans le module de surcharge « zodbcTableU.dhsp » on écrira :
OverWrite "zodbcTable.dhoP"
procedure ZoomDebut
beginp
ZoomOdbcAjouterModeles("Tables ODBC xxx",
"Ajouter des tables à partir de xxx", \
"Ajout de tables xxx", \
"fodbcxxx.dhfi", \
'Tables et Vues de xxx')
Standard.ZoomDebut
endp
Description de ZoomOdbcAjouterModeles :
ZoomOdbcAjouterModeles(ToolBar, Bulle, Menu, Fichier, Titre )
| Texte du bouton de la toolbar |
| Info bulle du bouton |
| Texte du choix dans le menu |
| Nom du fichier des tables spécifiques |
| Titre du zoom des modèles spécifiques |
Fichier de modèles spécifiques:
Le fichier des modèles de tables spécifiques doit être créé. Il a les mêmes caractéristiques que le fichier fodbcdivalto.dhfi. On peut procéder par copie, effacement et renommage de ce fichier.
Ajout des tables dans un fichier de modèles spécifiques
Voir le paragraphe Importer des tables ou des vues depuis le dictionnaire du chapitre Tables de référence.
Ancre | ||||
---|---|---|---|---|
|
Vues de la source
Ancre | ||||
---|---|---|---|---|
|
Vue
Voir la définition des vues
Le bouton "Tables/Vues de la source" ou la touche F6 permettent d'afficher la liste des tables et des vues d'une source. Il est alors possible d'ajouter, de modifier ou de supprimer une vue dans cette source.
L'ajout d'une vue se fera généralement par sélection dans une liste des vues de référence. Toutefois il est possible de saisir manuellement les informations.
Pour une vue, on trouvera les informations suivantes:
...
Exemple :
Choix arbitraire de l'index de lecture pour la vue des écritures non lettrées
Hfile ccfdd.dhsd ccfdce ccfdce
; procédure d'initialisation de MaVue
Public Procedure MaVue
Beginp
Ccfdce.key = 'E'
Endp
Positionner des filtres de lecture du fichier
Lorsque la lecture de la table de base est assurée par une procédure Diva, il peut être intéressant de positionner un filtre afin d'optimiser les temps de lecture.
Exemple :
; procédure d'initialisation de MaVue
Public Procedure MaVue
Beginp
…
…
hfilter(gtfpcf,"ce1 = 3 and dos = " & Mz.Dos ,"B 3" )
Endp
Paramètres de la vue pingreceive « ODBCINIT »
Le driver Odbc envoie par le tunnel le paramètre « ODBCINIT ». C'est une chaîne <hmp> qui contient les paramètres de la vue définis dans le dictionnaire de vue.
<Nom> | Nom de la vue |
<Version> | Numéro de version de la vue |
<NomDicoVue> | Nom du dictionnaire de vue |
<Dico> | Nom du dictionnaire de données du fichier de base |
<Fichier> | Nom du fichier dans le dictionnaire de données |
<Table> | Nom de la table dans le dictionnaire |
<VersionFichier> | Numéro de version du fichier ayant servi à la description de la vue |
<Index> | Nom de l'index à utiliser pour lire la table de base. Ce paramètre est absent s'il n'est pas renseigné dans la vue |
<Condition> | Clause SQL de sélection des lignes à lire |
<LectureDonnees> | Indicateur pour forcer la lecture du fichier des données sans passer par les index. Ce paramètre est absent si l'option n'est pas requise pour la vue |
<Confidentialite> | Code de confidentialité de la vue |
<DivaLecture> | Nom de la procédure Diva de lecture de la table de base. Ce paramètre est absent s'il n'est pas renseigné dans la vue |
Paramètres de la variable d'environnement Windows « ODBCPARAM »
Le driver ODBC au chargement du programme Diva crée une variable d'environnement nommée «ODBCPARAM» qui contient une chaîne <hmp> avec notamment le code de l'utilisateur.
<program> | Nom du programme Diva générique XodbcDiva.dhop |
<User> | Code de l'utilisateur |
Exemple :
1 Parametres S
1 User 20
…
…
Parametres = GetEnv("ODBCPARAM")
User = HmpSeek(Parametres, "user")
Remarque :
Le champ System.User contient également le code de l'utilisateur.
Ancre | ||||
---|---|---|---|---|
|
Lecture de la table de base d'une vue
Le paramétrage des vues permet d'associer à la vue une procédure Diva de lecture de la table de base. Cette procédure est exécutée par le driver ODBC pour chaque lecture d'une ligne de la table de base.
Ceci permet d'effectuer une lecture plus « applicative » de la table que la simple lecture séquentielle opérée en standard par le driver ODBC, pour obtenir par exemple la liste des clients sans facture pendant une période.
La description de tables fictives dans le dictionnaire permet de mettre à disposition des vues très élaborées, résultats d'algorithmes pris en charge par la fonction de lecture associée à la vue.
Paramètres
Le module comportant la procédure de lecture de la table doit impérativement comporter une déclaration publique de la table de base de la vue. Le nom de l'instance doit être impérativement le nom de la table elle-même. C'est cet enregistrement qui est renvoyé au driver à la fin de l'exécution de la procédure.
Fin de fichier
La fin de fichier est signifiée au driver ODBC par l'enregistrement entièrement à espace.
Index de lecture
Lorsque le choix de l'index de lecture est opéré par le driver ODBC, la procédure de lecture doit récupérer dans le tunnel la valeur de la clé courante (par PingReceive) et renvoyer la nouvelle valeur (par Pong) après la lecture. La valeur de la clé est identifiée par le mot clé 'ODBCKEY' dans le tunnel.
Exemple :
public record gtfdd.dhsd cli
; lecture des clients sans facture pour une période
Public Procedure LireClientSansFacture
1 Status X
1 Filtre s
Beginp
pingreceive("ODBCKEY",gtfpcf.key)
do
status = hread(gtfpcf,cli,,'F' )
while status <> H_EOF
; on cherche les factures
Filtre = "ticod = 'C' and tiers = '" & cli.tiers & "'"
Filtre &= " and dos = " & dos
Filtre &= " and pidt between "
Filtre &= datesql(datedebut) & " and " & datesql(datefin)
Filtre &= " and picod = 4"
hfilter( gtfent,filtre,"B" )
status = hread(gtfent,ent,,'F')
if Status = H_EOF
pong ("ODBCKEY",gtfpcf.key) ;il n'y a pas de facture
preturn
endif
wend
; c'est la fin
cli = ' '
preturn
Endp
Ancre | ||||
---|---|---|---|---|
|
Confidentialités des champs d'une vue
Le paramétrage des vues permet d'associer à la vue une procédure Diva de gestion des confidentialités des champs de la table de base d'une vue. Cette procédure est exécutée par le driver ODBC pour chaque lecture d'une ligne de la table de base.
Paramètres
Le module comportant la procédure de gestion des confidentialités doit impérativement comporter une déclaration publique de la table de base de la vue. Le nom de l'instance doit être impérativement le nom de la table elle-même.
Cet enregistrement est garni par le driver ODBC avant l'appel de la procédure. Il est renvoyé au driver après le traitement.
La procédure peut :
...
Ancre | ||||
---|---|---|---|---|
|
Fonctions Scalaires
Le driver ODBC prend en charge la gestion des fonctions scalaires suivantes :
Fonctions Date | Commentaire |
Current_Date() ou CurDate() | Date du jour |
Current_time(precision) ou Curtime() | Heure |
DayOfMonth(date) | Jour du mois dans une date |
Month(date) | Mois dans une date |
Year(date) | Année dans une date |
Fonctions Chaîne | Commentaire |
Lcase(chaîne) ou Lower(chaîne) | Conversion minuscule |
Ucase(chaîne) ou Upper(chaine) | Conversion majuscule |
Left(chaîne,nb) | Partie gauche |
Right(Chaîne,nb) | Partie droite |
Substring(Chaîne,pos,lg) | Sous-chaîne |
La syntaxe officielle pour l'appel de fonctions ODBC est { fn scalar-fonction(param) }
Par exemple : Select { fn lcase(nom) } from Client ;
Le driver accepte également la syntaxe scalar-fonction(param)
Par exemple : Select lcase(nom) from Client ;
Ancre | ||||
---|---|---|---|---|
|
Fonctions Date
Des fonctions spécifiques du driver Harmony permettent de faciliter le traitement des dates, et de développer des vues ou des requêtes SQL indépendantes de la période.
Par exemple la clause :
DateFacture between Har_FirstDayofLastMonth() and Har_LastDayofLastMonth()
donnera tous les mois les factures du mois précédent. Il n'est pas nécessaire d'adapter la requête chaque mois.
Fonctions Date | Commentaire |
Har_Yesterday() | Hier |
Har_FirstDayofMonth() | Premier jour du mois courant |
Har_LastDayofMonth() | Dernier jour du mois courant |
Har_FirstDayofLastMonth() | Premier jour du mois – 1 |
Har_LastDayofLastMonth() | Dernier jour du mois – 1 |
Har_FirstDayofMonthLastYear() | Premier jour du mois année n-1 |
Har_LastDayofMonthLastYear() | Dernier jour du mois année n-1 |
Har_FirstDayofYear() | Premier jour de l'année courante |
Har_LastDayofYear() | Dernier jour de l'année courante |
Har_FirstDayofLastYear() | Premier jour de l'année – 1 |
Har_LastDayofLastYear() | Dernier jour de l'année – 1 |
Har_TodayLastYear() | Aujourd'hui l'année dernière |
Har_FirstDayofLastMonthLastYear() | Premier jour du mois – 1 de l'année – 1 |
Har_LastDayofLastMonthLastYear () | Dernier jour du mois – 1 de l'année – 1 |
Ancre | ||||
---|---|---|---|---|
|
Variables d'environnement ODBC
Les variables d'environnement ODBC à l'instar des fonctions de date, permettent de développer des vues ou des requêtes SQL paramétrables.
Exemple 1
La variable MonDossier peut désigner le dossier de l'utilisateur courant. Ainsi la même requête peut être utilisée pour traiter le dossier 2 pour l'utilisateur Durand et le dossier 3 pour l'utilisateur Dupuis.
On écrira dans la clause
Where Dossier = MonDossier
Exemple 2
De la même manière, on peut utiliser deux variables pour définir les dates de début et de fin d'exercice comptable. Ainsi la requête n'aura pas besoin d'être adaptée lors du changement d'exercice, il suffira de modifier les valeurs des variables d'environnement.
Where DateEcriture between DateDebutExercice() and DateFinExercice()
Fichiers paramètre
Les fichiers paramètres fodbc.txt et fodbclocal.txt permettent de définir les noms, les valeurs et types des variables d'environnement ODBC.
Le fichier fodbc.txt contient des valeurs générales valables pour tous les utilisateurs, comme la date début d'exercice. Il sera en général sur le serveur de données.
Tandis que le fichier fodbclocal.txt contiendra plutôt des valeurs liées à l'interrogation en cours comme les dates de début et de fin d'interrogation ou le dossier de l'utilisateur. Il sera en général sur le poste de travail.
Si une variable est définie à la fois dans fodbc.txt et dans fodbclocal.txt, la valeur locale prévaut sur la valeur générale.
Ces variables sont stockées au format <hmp> dans les fichiers paramètres.
...