Outils pour utilisateurs

Outils du site


issue85:libreoffice_p_37

In my article in issue 83 of Full Circle Magazine, I walked you through creating a form that used a view, but I left things unfinished in the forms: I didn't do anything to format the controls to ensure data integrity. If you haven't already done so, read the article in Full Circle 83, and follow along to create the tables and forms. We will work with the “ProjectForm,” and see how we can improve data integrity. I'll wait if you need to work through the How-To in issue 83.

Dans mon article du numéro 83 du FCM, je vous ai montré comment créer un formulaire qui utilise une vue, mais j'ai laissé des choses en plan dans les formulaires : je n'ai rien fait concernant les contrôles qui assurent l'intégrité des données. Si vous ne l'avez pas encore fait, lisez l'article dans le FCM n° 83 et suivez-le pour créer les tables et les formulaires. Nous allons travailler avec le projet « ProjectForm » et voir comment nous pouvons améliorer l'intégrité des données. Je vais attendre si vous avez besoin de réaliser le tutoriel du numéro 83.

Date and Time Controls Now let's get down to work. On the “Forms” pane in the database file you created, right-click the “ProjectForm” and select “Edit”. As I have said before, the wizard usually joins a label with an input box, but in the case of date and time fields, it actually pairs them up with date and time controls. Without any formatting, they just look like text input boxes, but trust me, they are date and time controls. We will need to ungroup the control from its label in order to work with the date control. Right-click the “Due” label or date control, then select Group > Ungroup. Double-click the date control to bring up the control's properties dialog. On the “General” tab, you find all the adjustments you can make to the control. We are interested in the ones that create adjustments for date entry.

Contrôles de date et d'heure

Maintenant reprenons le travail. Dans le volet « Formulaires » de la base de données que vous avez créée, faites un clic droit sur « ProjectForm » et sélectionnez Éditer. Comme je l'ai déjà dit, l'assistant associe habituellement une étiquette avec une zone de saisie, mais, dans le cas des champs de date et d'heure, il les associe en fait avec des contrôles de date et d'heure. Sans aucun formatage, elles ressemblent aux zones de saisie de texte, mais croyez-moi, ce sont des contrôles de date et d'heure. Nous devons dissocier le contrôle de son étiquette avant de modifier le contrôle de date. Faites un clic droit sur l'étiquette « Due », ou sur le contrôle de date, et sélectionnez Groupe > Dissocier.

Double-cliquez sur le contrôle de date pour afficher la boîte de dialogue des propriétés. Dans l'onglet « Général », vous trouverez tous les ajustements disponibles. Nous nous intéressons à ceux qui ajustent la saisie de date.

Date Min / Date Max – These two options allow you to control the minimum and maximum date values allowed in the fields. These fields have default values of 01/01/1800 for minimum and 12/31/2200 for maximum. In general applications, these defaults should work, but if you have different needs, feel free to adjust. An example is an inventory database, where no shipping invoices dated before the inception of the company is necessary. You could set the minimum date to the opening day. Date Format – There are 12 different date formats. This option determines how the control will display the date. Scroll through the options and see which one best suits your application.

Date Min/Date Max - Ces deux options vous permettent de contrôler les valeurs de dates mini et maxi autorisées dans les champs. Les valeurs par défaut sont le 01/01/1980 pour le minimum et le 12/31/2200 pour le maximum. Dans les applications habituelles, ces valeurs par défaut devraient fonctionner, mais si vous avez des besoins différents, libre à vous de les adapter. Par exemple, dans une base de données de gestion de stock où il est nécessaire qu'aucune facture ne soit datée d'avant la date de création de la société. Vous devriez mettre la date mini à la date d'ouverture.

Format de Date - Il y a 12 formats différents de date. Cette option détermine le format d'affichage de la date par le contrôle. Parcourez la liste d'options et voyez celle qui convient le mieux à votre application.

Default Date – This is a default value for the field. If you have a date that users should use most of the time, then use that date. It will speed up data entry. It can also show the user the format in which to enter dates. Unfortunately, at this time, you cannot easily set the default to the (current) date the record was added. Spin Button – Setting this option to Yes will put an up-and-down spin button on the control. The user can use this button to adjust the month, day, and year. The user clicks into the part of the date they want to adjust and makes changes by clicking on these buttons. Very handy for data entry.

Date par défaut- Il y a une date par défaut pour ce champ. S'il y a une date que les utilisateurs choisiront la plupart du temps, alors utilisez cette date. Ça accélérera la saisie. Ça peut être aussi une façon de montrer le format de saisie des dates à l'utilisateur. Malheureusement, pour l' instant, vous ne pouvez pas choisir la date (courante) de saisie de l’enregistrement comme valeur par défaut.

Compteur - Mettre cette option à Oui ajoute un bouton « Monte-Baisse » au contrôle. L'utilisateur peut utiliser ce bouton pour ajuster le jour, le mois et l'année. L'utilisateur clique sur la partie de date à modifier et ajuste la valeur en cliquant sur ces boutons. Très pratique pour la saisie des dates.

Repeat – The Repeat option is related to the spin button option. It controls whether to repeat when you hold down the mouse button on the spin button. Use at your own discretion. Sometimes, it makes sense. Other times, not so much. Delay – The Delay option controls the speed of the repeat option. A longer delay means you have to hold the button down longer before it will repeat. The default is “50 ms” (milliseconds).

Répéter - L'option Répéter est liée à l'option Compteur. Elle vérifie si l'action est répétée quand vous tenez le bouton de souris appuyé sur le bouton « Monte-Baisse ». Elle est à votre disposition. Parfois, c'est logique de l'utiliser. D'autres fois, non.

Délai - L'option de Délai contrôle la vitesse de l'option de répétition. Un délai plus long signifie que vous devez tenir le bouton de souris plus longtemps avant que ça ne se répète. La valeur par défaut est « 50 ms » (millisecondes).

Dropdown – Dropdown adds a listbox style arrow to the control. Clicking it displays a calendar where you can select the date you need. NOTE: You can use the Spin Button and Dropdown options together to create a flexible control. After you make your adjustments to the control, save the form and close it. Open the form and test your newly adjusted date control. Feel free to experiment with the different control options to get a better idea of how they work. The options for a time control are the same as the date control except you don't have the Dropdown option.

Déroulante - l'option « Déroulante » ajoute une flèche de type liste déroulante au contrôle. En cliquant dessus, un calendrier s'affiche pour pouvoir sélectionner la date voulue.

NOTE : Vous pouvez utiliser les options Compteur et Déroulante ensemble pour créer un contrôle flexible.

Après avoir fait les ajustements au contrôle, sauvez le formulaire et fermez-le. Ouvrez le formulaire et testez votre contrôle de date nouvellement ajusté. N'hésitez pas à essayer les différentes options pour avoir une meilleure idée de leur usage. Les options pour le contrôle de l'heure sont les mêmes que pour le contrôle de date sauf l'option Déroulante qui n'est pas disponible.

Making the Title Mandatory Now that we have set up the date control, let's tackle some possible issues with the “Title” field's input box. When we created the field, we set its maximum length at 50. However, as the input box stands now, we can type more than 50 characters into the box. Trying to save the record with more than 50 characters in “Title” results in an SQL insert error. Also, when we created the table, we declared “Title” as “NOT NULL.” We want to make the “Title” a mandatory entry for each record. The “NOT NULL” status prevents the input box from being left empty, but it is still possible to type just a space and the form will accept the entry as valid. So, we have a few things to fix in our form.

Rendre le titre obligatoire

Maintenant que nous avons réglé le contrôle de date, attaquons-nous à quelques possibles difficultés avec la zone de saisie du champ « Title ». Quand nous avons créé ce champ, nous en avons limité la longueur à 50 caractères. Cependant, les dimensions actuelles de la zone de texte nous permettent de saisir plus de 50 caractères. Si nous essayons de sauvegarder l’enregistrement avec plus de 50 caractères dans « Title », une erreur SQL va se produire. De plus, quand nous avons créé la table, nous avons déclaré qu'une entrée était obligatoire. Le statut « NON NULL » évite que la zone de saisie soit laissée vide, mais il est toujours possible de saisir une espace pour que le formulaire accepte la saisie comme valide. Aussi, nous avons quelques points à régler dans notre formulaire.

Open “ProjectForm” for editing. Right-clicking the “Title” label or input box, Group > Ungroup. Now, double-click the “Title” input box to bring up its properties dialog. On the “General” tab, set the value for “Max Length” to 50. This will prevent the user from entering more than 50 characters. On the “Data” tab, make sure that both “Empty String Is NULL” and “Input Required” are set to “Yes.” These two settings become a redundancy check for making sure there is a valid value in the input field.

Ouvrez « ProjectForm » en édition. Faites un clic droit sur l'étiquette ou la zone de saisie « Title », Groupe > Dissocier. Maintenant, double-cliquez sur la zone de saisie « Title » pour afficher la boîte de dialogue des propriétés. Dans l'onglet « Général », mettez la valeur de « Longueur de texte max » à 50. Ceci empêche l'utilisateur de saisir plus de 50 caractères. Dans l'onglet « Données », assurez-vous que « Espace vide égale NULL » et « Saisie requise » sont tous les deux à « Oui ». Ces 2 réglages assurent un contrôle redondant vérifiant que le champ saisi contient une valeur valide.

However, we still have an issue with the fact that the user can just create a “Title” with spaces. To fix this issue, we will need to use a little SQL. I have looked for a graphical way to get the same result, but sometimes, when you work with databases, SQL is the best, if not only, choice. We will add a CHECK constraint to the “Project” table. Click on Tools > SQL. To enter the SQL, Tools > SQL… Use the following SQL command to add the constraint to the table:

Cependant, nous avons toujours un problème avec le fait que l'utilisateur peut simplement créer un titre avec des espaces. Pour résoudre ce point, nous avons besoin d'utiliser un bout de SQL. J'avais regardé comment obtenir le même résultat avec une interface graphique, mais, parfois quand on travaille avec des bases de données, SQL est le meilleur, si ce n'est le seul choix. Nous allons ajouter une contrainte CHECK à la table « Project ». Cliquez sur Outils > SQL. Utilisez la commande SQL suivante pour ajouter la contrainte à la table :

ALTER TABLE “Project”

ADD CONSTRAINT NOSPACES_CK

CHECK(TRIM(BOTH FROM “Title”) <> ); The ALTER TABLE command means we are making changes to the table, in this case the table “Project.” To indicate the change we are making, we use the ADD CONSTRAINT command. NOSPACES_CK is the name of the constraint we are adding. It's not required that you make your constraint names all caps. I just do it as a matter of convention. The last line is the CHECK constraint. Using the built-in function TRIM, it removes all the spaces from both sides of the string and checks to make sure it is not equal to an empty string. Now, if someone tries to use a string of spaces for the “Title”, an SQL constraint error is generated. La commande ALTER TABLE signifie que nous apportons des changements à la table, en l’occurrence la table « Project ». Pour indiquer le changement à faire, nous utilisons la commande ADD CONSTRAINT. NOSPACES_CK est le nom de la contrainte à ajouter. Il n'est pas nécessaire de mettre les noms de contrainte tout en majuscules. Je fais cela juste comme une convention. La dernière ligne est la contrainte CHECK. En utilisant la fonction intégrée TRIM, cela enlève toutes les espaces aux deux bouts de la chaîne de caractères et ça les vérifie pour être sûr qu'il ne reste pas de chaîne vide. Maintenant, si quelqu'un essaie de placer une chaîne d'espaces dans « Title », cela générera une erreur de contrainte SQL. You can do the same thing for the “FirstName” and “LastName” fields in the “TeamMember” table. The “Max Length” for the name fields is 25. I suggest the following SQL for adding the constraints: Vous pouvez faire la même chose pour les champs « FirstName » et « LastName » dans la table « TeamMember ». La « Longueur de texte max » pour les noms de champs est 25. Je suggère les commandes SQL suivantes pour ajouter les contraintes : ALTER TABLE “TeamMember” ADD CONSTRAINT RNAME_NOSPACES_CK CHECK(TRIM(BOTH FROM “FirstName”) <> );

ALTER TABLE “TeamMember”

ADD CONSTRAINT LNAME_NOSPACES_CK

CHECK(TRIM(BOTH FROM “LastName”) <> '');

Improving the View Query The view we create for putting the names in the drop down list box in the “ProjectForm” is good, legal SQL, but there are a couple of problems. First, although we have prevented a name from being just spaces, the users can still add a legal name with spaces added to the beginning or end. Also, the names are not in any order.

Améliorer la requête de vue

La vue que nous avons créée pour mettre les noms sous forme de liste déroulante dans « ProjectForm » est en bon et légal SQL mais il y a deux problèmes. D'abord, bien que nous ayons pris les dispositions pour empêcher qu'un nom ne soit fait que d'espaces, les utilisateurs peuvent encore ajouter des noms corrects avec des espaces au début ou à la fin. De ce fait, les noms ne sont plus ordonnés.

Luckily, we can edit our view and make some additions to address these problems. Select “Tables” from the “Database” pane. Right-click “TeamView” and select “Edit in SQL View…” This brings up the SQL we used to create the view. Change the current SQL so it looks like the following:

Heureusement, nous pouvons éditer notre vue et faire quelques compléments pour résoudre ces difficultés. Choisissez « Tables » dans le panneau « Base de données ». Faites un clic droit sur « TeamView » et sélectionnez « Editer en mode SQL… ». Ceci affiche le code SQL utilisé pour créer la vue. Modifiez le code SQL affiché par la déclaration suivante :

SELECT TRIM(BOTH FROM “FirstName”) || ' '

from “TeamMember” ORDER BY “LastName”, “FirstName”;

We already saw TRIM when we created our CHECK constraints. It removes all spaces from the beginning and end of ”FirstName” and “LastName”.

Nous avons déjà vu TRIM quand nous avons créé les contraintes CHECK. Il enlève les espaces au début et à la fin de « FirstName » et de « LastName ».

At the end, we tag on an ORDER BY command to sort the names by “LastName”, then “FirstName.” This means the names will first sort by “LastName”, then if there is more than one of the same “LastName”, it will sort by “FirstName.” With adjustments to the controls and a little SQL, we were able to make many improvements to our forms, making data input not only easier but more reliable. If you are interested in a better understanding of the SQL used in this How-To, I have a couple of resources for you. My blog “What the Tech Am I Doing?” LibreOffice Base posts http://eeperry.wordpress.com/category/libreoffice/libreoffice-base/ W3Schools SQL Tutorial http://www.w3schools.com/sql/default.asp

A la fin, nous ajoutons la commande ORDER BY pour classer les noms par « LastName », puis par « FirstName ». Cela signifie que les noms seront d'abord triés par « LastName », puis, s'il y a plus d'un même « LastName », un tri se fera par « FirstName» Avec les réglages des contrôles et un peu de SQL, nous avons été capables d'apporter plusieurs améliorations à nos formulaires, rendant la saisie des données non seulement plus simple, mais aussi plus fiable. Si vous voulez mieux comprendre le code SQL utilisé dans ce tutoriel, j'ai deux ressources pour vous. Sur mon blog « What the tech am I doing ? » (Ndt : Quelle technique j'utilise ?), les billets sur LibreOffice Base, http://eeperry.wordpress.com/category/libreoffice/libreoffice-base/

W3Schools SQL Tutorial (Ndt : Tutoriel SQL des écoles W3) http://www.w3schools.com/sql/default.asp

issue85/libreoffice_p_37.txt · Dernière modification : 2014/11/25 18:59 de auntiee