La partie 2 discutera de la relation entre les tables de base de données et les formulaires. En particulier, comment définir une relation entre deux tables et utiliser des «tables de référence» comme source de données pour les listes déroulantes.
Versions d'OpenOffice et de LibreOffice pour lesquelles ce message est pertinent de 3.0 à 6.2 (la version actuelle de LibreOffice). À partir de la version 3.0, OpenOffice Base a la possibilité d'enregistrer des scripts dans un fichier de base de données (avec l'extension .odb), ce qui facilite la distribution du code de macro OO Basic
Il y a eu une certaine confusion avec les formulaires dans OpenOffice Base. Le fait est que dans le processus d'évolution du logiciel d'une suite bureautique à un environnement de base de données, il s'est avéré que les formulaires, les formulaires, les formulaires et les formulaires ne sont pas la même chose. Et la forme n'est pas seulement la forme. Je vais vous expliquer plus en détail.
Lorsque vous ouvrez la base de données OpenOffice Base en mode édition, vous voyez quatre signets sur le côté gauche de l'écran. Dans la version russe, cela ressemblera à
- Des tables
- Demandes
- Formulaires
- Rapports
En ce sens, le formulaire est une application distincte qui s'exécute dans une fenêtre distincte. Je note également qu'il s'agit en fait de la fenêtre dans laquelle l'instance d'OpenOffice Writer est lancée.
Remarque Étant donné que le formulaire est en fait une instance d'OpenOffice Writer - vous pouvez créer une application sans charger le composant OpenOffice Base - directement dans OpenOffice Writer.Chaque formulaire possède une collection d'objets Forms of Form. Au début, cette collection est vide. Malgré cela, vous pouvez ouvrir et fermer le formulaire. Et même y afficher des informations textuelles. Et uniquement lorsque vous ajoutez un nouveau contrôle (par exemple, Button), le système crée un objet Form avec le nom par défaut Form, si vous n'avez pas créé un tel objet vous-même à ce moment-là.
Il est plus pratique de créer de nouveaux formulaires à partir du navigateur de formulaires (affiché dans la palette sous forme de boussole), qui peut également être appelé à partir du menu Affichage | Barre d'outils | Navigation dans les formulaires. Les objets de formulaire sont créés soit au niveau supérieur de la collection Forms, soit subordonnés à un autre objet Form. Cela n'affecte pas l'apparence du formulaire, mais cela peut être utile lors de la définition des relations entre les tables.
Ici, nous devons noter une anomalie de l'objet Form. Cet objet est principalement un objet associé à une table de base de données ou à une requête SQL. Vous pouvez considérer Form comme un objet ResultSet (tel qu'il est réellement). Form, d'autre part, est un conteneur pour les contrôles, comme FORM dans un document HTML (et cela est également vrai).
Ouvrez le formulaire nouvellement créé en mode édition (bouton droit de la souris | Modifier). Créez un nouvel objet Form avec le nom Form ou un autre nom que vous aimez. Dans cet élément Form, créez un élément Form enfant.
Chaque formulaire doit être associé à une table de base de données, une requête ou une requête SQL existante. Dans le formulaire esclave, vous pouvez définir les règles afin que les données filtrées par la valeur des champs associés dans le formulaire principal soient affichées en tant que maître / esclave. Pour ce faire, dans l'éditeur de propriétés du formulaire subordonné, remplissez les champs de lien maître et les propriétés de lien esclave.
Nous allons maintenant ajouter un élément de contrôle de table à chacun des formulaires en sélectionnant le formulaire approprié dans le navigateur de formulaires>. L'élément Table Control n'est pas dans le panneau des éléments disponibles. Pour afficher une liste étendue d'éléments, vous devez activer le bouton Plus de contrôles dans la palette d'éléments. Après avoir ajouté l'élément Table Control, il est nécessaire d'entrer dans le mode d'édition de cet élément et d'ajouter les colonnes nécessaires à l'affichage du tableau (bouton droit de la souris -> Insérer / Remplacer / Supprimer la colonne)
Le deuxième type est le type de relation fréquemment rencontré dans la pratique entre les tables (après maître / esclave), et que nous considérerons - une relation de type répertoire. Nous stockons dans la table de données la clé de l'objet GUID, l'auto-incrémentation, et dans la table affichée nous affichons son nom complet, tiré de la table liée, le «répertoire». Il existe un mécanisme pratique pour cela. Dans le Visual Table Designer, ajoutez une colonne de type List Box. Si une colonne de type Numérique / Texte a déjà été créée dans laquelle la clé est affichée (et non le nom), il est possible de changer son type en Zone de liste (clic droit | Remplacer par | Zone de liste). Ensuite, modifiez la liste des propriétés de la colonne. Sous l'onglet données, définissez la propriété Type of List Content sur SQL. La requête dans la propriété List Content doit contenir la valeur affichée dans la première colonne, et la propriété Bound Field sera l'index de la colonne avec le champ clé (en supposant que la première colonne a l'index 0). Autrement dit, dans la grande majorité des requêtes, ce sera 1 pour les requêtes de type
SELECT USERNAME, USERID FROM USERS ORDER BY USERNAME
Jusqu'à présent, le travail a été décrit en mode configurateur sans programmation. Ajoutez des fonctionnalités avec les macros OO Basic.
Créez un filtre pour la table de base de données en fonction de la valeur entrée dans la zone de texte. Pour ce faire, nous écrivons dans le langage OO Basic une procédure qui traite un événement à partir du clavier.
Sub TextBox_onKeyUp(oEvent) oDocument = ThisComponent oDocument.LockControllers sText = oEvent.Source.text if Len(sText) > 3 Then oForm = ThisComponent.Drawpage.Forms.getByName("MyForm") oForm.Filter = "USERNAME LIKE '" + sText + "%'" oForm.reload() End If oDocument.UnlockControllers End Sub
Nous associons cette procédure à l'événement Key relâché du champ de texte (sous l'onglet événement de la liste des propriétés de l'élément). Notez que ce champ de texte doit être situé dans un autre formulaire (pas dans celui auquel le filtre est superposé), afin que le rechargement de oForm.reload () ne "nullise" pas sa valeur actuelle saisie à partir du clavier.
À suivre.