Cours 4D v11 Addendum R1
Cours 4D v11 Addendum R1 SQL avec exercices corrigés
...
DECRIRE EXECUTION RECHERCHE (statut)
Paramètres Type Description
statut Booléen → Vrai=Enregistrer la description des requêtes
Faux=Stopper l’enregistrement
La commande DECRIRE EXECUTION RECHERCHE permet d’activer ou d’inactiver le mode d’analyse de l’exécution des recherches pour le process courant. La commande tient compte indifféremment des recherches effectuées via le langage 4D et des requêtes SQL.
L’appel de la commande avec le paramètre statut à Vrai active le mode d’analyse des recherches. Dans ce mode, le moteur de 4D enregistrera en interne deux séries d’informations spécifiques lors de chaque requête effectuée par la suite sur les données :
■ la description détaillée de la recherche juste avant son exécution, c’est-à-dire la recherche prévue (le plan de recherche),
■ la description détaillée de la recherche telle qu’elle a réellement été exécutée (le chemin de recherche).
Les informations enregistrées incluent le type de recherche (indexée, séquentielle), le nombre d’enregistrements trouvés et le temps nécessaire à l’exécution de chaque critère de recherche.
Vous pouvez ensuite lire ces informations à l’aide des nouvelles commandes Lire dernier plan recherche et Lire dernier chemin recherche.
En général, la description du plan d’une recherche et celle de son chemin sont identiques, mais elles peuvent toutefois différer car 4D peut mettre en oeuvre des optimisations dynamiques au cours de l’exécution de la recherche, dans le but d’améliorer les performances. Par exemple, une recherche indexée peut être convertie dynamiquement en recherche séquentielle si le moteur de 4D estime qu’elle sera plus rapide — c’est parfois le cas notamment lorsque le nombre d’enregistrements parmi lesquels effectuer la recherche est faible.
Passez Faux dans le paramètre statut lorsque vous n’avez plus besoin d’analyser les recherches. Le mode d’analyse de l’exécution des recherches peut ralentir l’application.
▼ L’exemple suivant illustre le type d’information obtenue via ces com-mandes en cas de requête SQL :
C_TEXTE($vResultPlan;$vResultPath) TABLEAU TEXTE(aTitles;0) TABLEAU TEXTE(aDirectors;0)
DECRIRE EXECUTION RECHERCHE(Vrai) `mode analyse
Debut SQL
SELECT ACTORS.FirstName, CITIES.City_Name
FROM ACTORS, CITIES
WHERE ACTORS.Birth_City_ID=CITIES.City_ID ORDER BY 1
INTO :aTitles, :aDirectors;
Fin SQL
$vResultPlan:=Lire dernier plan recherche(Description format Texte)
$vResultPath:=Lire dernier chemin recherche(Description format Texte) DECRIRE EXECUTION RECHERCHE(Faux) `Fin du mode analyse
A l’issue de l’exécution de ce code, $vResultPlan et $vResultPath contiennent les descriptions des recherches effectuées, par exemple :
■ $vResultPlan :
[Join] : ACTORS.Birth_City_ID = CITIES.City_ID
...
Lire dernier plan recherche
Lire dernier plan recherche (formatDesc) → Chaîne
Paramètres Type Description
formatDesc Entier long → Format de description : Texte ou XML
Résultat Chaîne ← Description du plan de la dernière
recherche exécutée
La commande Lire dernier plan recherche retourne la description interne du plan d’exécution prévu pour la dernière recherche effectuée sur les données. Pour plus d’informations sur les descriptions de recherches, reportez-vous à la documentation de la commande
DECRIRE EXECUTION RECHERCHE.
Cette description est retournée au format Texte ou XML en fonction de la valeur passée dans le paramètre formatDesc. Vous pouvez passer une des constantes suivantes, placées dans le thème “Recherches” :
Constante Type Valeur
Description format Texte Entier long 0
Description format XML Entier long 1
Cette commande retourne une valeur significative si la commande DECRIRE EXECUTION RECHERCHE a été exécutée au cours de la session.
La description du plan de la dernière recherche peut être comparée à la description du chemin réel de la dernière recherche (obtenue à l’aide de la commande Lire dernier chemin recherche) à des fins d’optimisations. Pour plus d’informations, reportez-vous à la description de la commande DECRIRE EXECUTION RECHERCHE.
Lire dernier chemin recherche (formatDesc) → Chaîne
Paramètres Type Description
formatDesc Entier long → Format de description : Texte ou XML
Résultat Chaîne ← Description du chemin de la dernière
recherche exécutée
La commande Lire dernier chemin recherche retourne la description interne détaillée du chemin réel de la dernière recherche effectuée sur les données. Pour plus d’informations sur les descriptions de recherches, reportez-vous à la documentation de la commande
DECRIRE EXECUTION RECHERCHE.
Cette description est retournée au format Texte ou XML en fonction de la valeur passée dans le paramètre formatDesc. Vous pouvez passer une des constantes suivantes, placées dans le thème “Recherches” :
Constante Type Valeur
Description format Texte Entier long 0
Description format XML Entier long 1
Cette commande retourne une valeur significative si la commande DECRIRE EXECUTION RECHERCHE a été exécutée au cours de la session.
La description du chemin de la dernière recherche peut être comparée à la description du plan prévu de la dernière recherche (obtenue à l’aide de la commande Lire dernier plan recherche) à des fins d’optimisations. Pour plus d’informations, reportez-vous à la description de la commande DECRIRE EXECUTION RECHERCHE.
Les nouveautés décrites dans ce paragraphe concernent le moteur SQL intégré de 4D.
Gestion de la casse des caractères
Une nouvelle préférence permet de modifier le mode de prise en compte de la casse des caractères dans les requêtes SQL : “Tenir compte de la casse des caractères pour les comparaisons de chaînes”.
L’option est située dans la page SQL/Configuration des Préférences :
Nouvelle option
Cette option est cochée par défaut, ce qui signifie que le moteur SQL établit une différence entre les majuscules et les minuscules lors des comparaisons de chaînes (tris et recherches). Par exemple “ABC”= “ABC” mais “ABC” # “Abc”.
Dans certains cas, par exemple pour aligner le fonctionnement du moteur SQL sur celui du moteur 4D, vous pourrez souhaiter que les comparaisons de chaînes ne tiennent pas compte de la casse (“ABC”=“Abc”). Pour cela, il suffit de désélectionner l’option.
Nouveau sélecteur pour FIXER PARAMETRE BASE et Lire parametre base
L’option de prise en compte de la casse par le moteur SQL peut être fixée et lue par programmation à l’aide des commandes FIXER PARAMETRE BASE et Lire parametre base. Pour cela, un nouveau sélecteur a été ajouté :
■ Sélecteur = 44 (Casse caractères moteur SQL)
Référencer des expressions de type pointeur
■ Valeurs possibles : 0 ou 1 (0 = casse non prise en compte, 1 = casse prise en compte)
■ Description : Activation ou inactivation de la prise en compte de la casse des caractères pour les comparaisons de chaînes effectuées par le moteur SQL.
Il est désormais possible de référencer directement des expressions de type pointeur (dépointé ou non) dans les requêtes SQL.
■ Passage d’une variable par un pointeur dépointé :
C_ENTIER LONG($vLong) C_POINTEUR($vPointeur) $vLong:=1 $vPointeur:=->$vLong
Debut SQL
SELECT Col1 FROM TEST WHERE Col1=:$vPointeur->;
Fin SQL
■ Passage d’une variable par un pointeur non dépointé :
C_ENTIER LONG($vLong) C_POINTEUR($vPointeur) $vLong:=1 $vPointeur:=->$vLong
Debut SQL
SELECT Col1 FROM TEST WHERE Col1=:$vPointeur;
Fin SQL
Ce principe fonctionne avec tous les types de requêtes SQL : commandes ODBC, balises Debut/Fin SQL et commande CHERCHER PAR SQL.
Note Seul un niveau de pointeur est pris en charge ; les pointeurs de pointeurs ne peuvent pas être utilisés.
Unicode
4D v11 SQL Release 1 comporte plusieurs nouveautés liées à la prise en charge étendue de l’Unicode.
Menus
Dans une application 4D, les menus et leurs libellés peuvent désormais être affichés en Unicode. Cette possibilité permet d’utiliser par exemple des caractères japonais et grecs dans le même menu.
Cette nouveauté concerne tous les types de menus, qu’ils aient été créés via l’éditeur de menus ou par programmation.
Bien entendu, cette fonction est disponible uniquement lorsque le mode Unicode est activé dans la base.
L’option de compilation “Type alpha par défaut” de la page Mode Développement/Compilateur est supprimée lorsque la base fonctionne en mode Unicode :
...
Remplacer chaine (source; obsolète; nouveau{; remplacements}{; *}}) → Chaîne
Paramètres Type Description
source Chaîne → Chaîne de départ
obsolète Chaîne → Caractère(s) à remplacer
nouveau Chaîne → Chaîne de remplacement
remplacements Numérique → Nombre de remplacements à effec-
tuer
* * → Si passé : évaluation diacritique
Résultat Chaîne ← Chaîne résultante
La commande Remplacer chaine admet désormais l’astérisque * en dernier paramètre. Si vous passez ce paramètre, vous indiquez que l’évaluation des caractères doit être diacritique, c’est-à-dire qu’elle doit tenir compte de la casse des caractères et des caractères accentués (a#A, a#à...).
Ce principe est illustré dans les exemples suivants :
vRésultat:=Remplacer chaine("Crème brûlée";"Brulee";"caramel") `vRésultat est égal à "Crème caramel"
vRésultat:=Remplacer chaine("Crème brûlée";"Brulee";"caramel";*) `vRésultat est égal à "Crème brûlée"
Dans la nouvelle version du plug-in 4D View, la saisie et l’affichage de caractères s’effectue désormais en Unicode. Ce mode est actif quel que soit l’état de l’option “Unicode” de 4D.
4D View v11.1 peut ouvrir les documents créés en version précédente. En revanche, les documents 4D View créés à partir de la version 11.1 ne pourront pas être rouverts en version 11 ou 2004.x.
Autres nouveautés
Etats rapides et paramètres d’impression
Pour maintenir la cohérence de vos interfaces, 4D uniformise désormais les paramètres d’impression des zones d’états rapides et celles de l’application.
Dans les versions précédentes de 4D, les paramètres d’impression des zones d’états rapides étaient stockés séparément avec chaque état. Les éventuelles modifications des paramètres d’impression de 4D n’étaient pas reportées sur les états rapides et inversement.
A compter de la version 11.1, les paramètres d’impression sont toujours identiques dans 4D et dans les zones d’états rapides. Toute modification effectuée sur les paramètres d’impression de 4D est reportée sur ceux des états rapides. A l’inverse, lors du chargement d’un état rapide, les paramètres d’impression de l’état remplacent ceux de 4D.
... ...
EXERCICE
Naviguez quelques instants au sein de la base GestionParcInfo_36_corrigée pour en découvrir les principales fonctionnalités (bulles d’aides, facilités de saisie, paramétrages, préférences, accès Web...) Vous allez maintenant créer une nouvelle base de données :
1 Dans le menu Fichier, choisissez Nouveau puis Base de données.
2 Donnez un nom à votre base (par exemple “GestionParcInfo”)
Une fois votre base de données enregistrée, 4D vous présente l’Explorateur. Sur votre disque dur, le dossier GestionParcInfo comporte les éléments suivants :
COMMENTAIRES
Cette base correspond à ce que vous obtiendrez à la fin de ce guide. Vous pourrez bien évidemment lui ajouter de nombreuses fonctionnalités (ergonomie, programmation…) pour en faire une application professionnelle. Je vous conseille de consulter les autres bases exemples ainsi que le site www.4D.fr pour découvrir les nombreuses possibilités et solutions imaginées et mise en œuvre par les ingénieux développeurs que nous sommes tous devenus :=)))
Et pour ceux qui auront besoin de fonctions ou commandes spécifiques non disponibles en standard dans 4D ou dans les plug-ins, vous pourrez utiliser le Plugin SDK (gratuit) qui vous permettra de réaliser en un clin d’œil la structure de vos projets C++.
EXERCICE
- Mettez en place un système qui permet d’afficher le message " A bientôt" lorsqu’on quitte la base de données. Indice : cet exercice requiert l’utilisation de la méthode base Sur fermeture.
- Dans la suite des leçons, vous pourrez ajouter une ligne de menu dans ce menu Outil pour chaque fonctionnalité particulière.
EXERCICE
■ Répétez ces manipulations avec chacun des boutons du formulaire.
■ Ajoutez également les boutons fonctionnels (recherche, tri...) comme sur l’exemple proposé.
Il regroupe les différents accès aux tables à gauche et les boutons de fonction (ajouter, imprimer, supprimer...) en haut.
Ne mettez pas de programmation dans ces derniers boutons, nous le ferons lors de leur utilisation.
Remarque :
Tous les boutons de la colonne de gauche (de technicien à paramètres) restent en 1 ligne x 1 colonne. Les cases à cocher dans les propriétés d’animation sont : Tous les boutons en haut (de Terminer à Supprimer) sont découpés en 4 lignes x 1 colonne et ont comme propriétés d’animation :
■ Créez les textes de ces boutons. Ils seront paramétrés ultérieurement pour tenir compte de la langue choisie.
■ Reproduisez la manipulation pour chacun des boutons en modifiant le numéro de page.
■ Pour vérifier le changement de pages, ajoutez un texte ou un dessin différent (ou à un emplacement différent) sur chacune des pages.
COMMENTAIRES
Au lieu de gérer dans chaque bouton la même ligne de code, on peut appeler une méthode et lui passer en paramètre le numéro de page à afficher. Ce sera beaucoup plus souple en maintenance et permettra éventuellement de conditionner le changement de page en fonction d’un ou plusieurs critères. On peut également gérer plus de pages que de boutons visibles et conserver ainsi des informations "masquées" accessibles également "sous conditions".
EXERCICE
Terminez la saisie dans la table TECHNICIENS à partir de la liste d’informations fournies. Exercice de synthèse :
■ Créez la table LOGICIELS à partir des données ci-dessous :
■ Créez les formulaires automatiquement,
■ Saisissez les 3 premières lignes de données.
EXERCICE Paramétrez tous vos liens à la lumière des indications fournies cidessous : Création en cascade :
■ Créer un logiciel et affectez-lui un matériel qui n’est pas encore enregistré => création de la fiche matériel
■ Créer une intervention pour un Matériel inexistant (non encore renseigné dans la base de données) => création de l’enregistrement Matériel. C’est le cas notamment lors de la première installation d’un matériel.
■ Indiquez dans l’enregistrement Intervention un Technicien qui n’existe pas (non encore renseigné) => création de l’enregistrement Technicien
■ Validez ensuite chacun des enregistrements (ils sont empilés en mémoire)
Vous constatez que sans programmer nous avons pu créer des enregistrements dans 4 tables et assurer l’intégrité des données. Ce principe reste valable si nous travaillons avec 10 tables en cascade. Pour préparer les imports du chapitre suivant, supprimez tous les enregistrements dans toutes les tables... que se passe-t-il ? Si vous avez activé la case sur certains liens, il faut commencer par supprimer les enregistrements dans la table N (point de départ du lien) et remonter de proche en proche. Par contre, si tous les liens sont avec l’option cochée, supprimer un matériel supprime en cascade les enregistrements de toutes les tables liées (Interventions, Logiciels...).
- Pour les tables Matériels et Interventions, créez le formulaire d’affichage en liste puis intégrez-le dans le formulaire Navigation. Pensez à modifier les méthodes des boutons pour réaliser les sélections d’enregistrements. Pensez également à recopier sur chaque page le pointeur bleu qui indique sur quelle liste on se trouve.
…
Exercez-vous en essayant d’obtenir les états suivants :
■ Liste des interventions par technicien
■ Nombre d’interventions par technicien
■ Nombre d’interventions par type d’intervention et technicien
■ Nombre d’interventions par objet et par technicien
…
- Réécrivez les prénoms avec le 1er caractère en majuscule et le reste du prénom en minuscules.
- Transférez par couper/coller sur un formulaire parent l’ensemble des boutons des formulaires Entrée puis mettez en place l’héritage.
- Mettez en place les formulaires d’impression Liste et les formulaires détaillés sur chacune des tables. Faites des essais d’impression Dans un formulaire impression, vous pouvez bien évidemment intégrer un sous-formulaire. Vous allez par exemple créer un formulaire qui permet d’imprimer l’enregistrement technicien ainsi que l’ensemble de ses interventions.
Attention, l’héritage est réservé à l’affichage. Il n’est pas actif dans le cadre des impressions. Profitez de ce chapitre pour bien étudier l’ensemble des possibilités offertes par l’assistant de création de formulaires, notamment la partie accessible via le bouton “Avancé”.
Pour compléter cette première approche, je vous conseille de consulter les thèmes ci-dessous dans la documentation de 4D : Impression avec rupture Impression par zone (Imprimer ligne) Dimensionnement des objets lors des impressions Déplacement programmé des taquets Ajustement automatique de la taille des objets