1 message in org.openoffice.fr.progmodification d'un champ de formulaire...
FromSent OnAttachments
Michel GardieFeb 20, 2008 5:42 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:modification d'un champ de formulaire (base)Actions...
From:Michel Gardie (mich@it-sudparis.eu)
Date:Feb 20, 2008 5:42:21 am
List:org.openoffice.fr.prog

Bonjour.

Je possède une petite base de données personnelle, et j'ai créé un certain nombre de formulaires permettant de gérer la base. La base contient des films, des acteurs, etc. Au début, mes formulaires étaient très simples, et au fil du temps, j'ai rajouté à certains d'entre eux des sous-formulaires contrôlés par des macros.

Puis, j'ai eu une idée saugrenue. Imaginons un formulaire dans lequel se trouve un champ formatté auquel est associé un attribut d'une table (ce sera le numéro d'un acteur par exemple). Jusqu'à présent, si je voulais ajouter un nouvel enregistrement à ma table, je saisissais à la main une valeur dans ce champ, puis j'enregistrais le nouveau tuple (en cliquant sur le petit bouton libellé "enregistrer l'enregistrement" (quelle originalité !)).

Etant d'un naturel fainéant, je me suis dis qu'il pouvait être intéressant de saisir le contenu de ce champ à partir d'un sous-formulaire. Je fais afficher les données de ce sous-formulaire sous la forme d'une table (TableControl). Le sous formulaire m'affiche une liste d'acteurs avec leurs numéros. Note: je modifie la requête SQL du sous-formulaire pour n'afficher que les noms des acteurs qui m'intéressent. Je sais faire cela sans problème.

Mon idée est ensuite de cliquer dans la table sur la ligne qui m'intéresse, d'extraire le numéro d'acteur désiré, puis de l'injecter directement dans le champ formatté.

J'ai donc écrit quelque chose comme ceci :

REM pour générer les données du sous-formulaire Sub GenerationListeActeurs dim oListeActeur as object dim oNom as object dim nom as string dim sql as string oListeActeur = ThisComponent.DrawPage.Forms.getByName("ChoixActeur") oNom = oListe.getByName("NomActeur") nom = oNom.text sql = "SELECT ""num_acteur"", ""nom"", ""prenom"", ""sexe"" FROM ""Acteurs"" AS ""Acteurs"" WHERE ( ( ""nom"" LIKE '%" & nom & "%' ) )" oListe.command = sql oListe.reload End Sub

REM cette fonction est activée lorsqu'on clique dans la table de sélection des acteurs sub SelectionActeur dim oListeActeur as object dim oTable as object dim oFormulairePrincipal as object dim numero as double dim numero_texte as string dim oChamp as object oListeActeur = ThisComponent.DrawPage.Forms.getByName("ChoixActeur") oFormulairePrincipal = ThisComponent.DrawPage.Forms.getByName("MainForm") oTable = oListeActeur.getByName("TableControl") numero = oTable(0).getCurrentValue() numero_texte = Cstr(numero)

REM à partir d'ici, je bloque. oChamp = oFormulairePrincipal.getByName("fmtNumActeur") oChamp.text = numero_texte end sub

La deuxième macro (celle dénommée SelectionActeur) extrait le numéro d'acteur de la table (sous la forme d'un double). Je suis capable de transformer ce double en string si nécessaire.

Ensuite, je bloque.

J'ai pensé écrire quelque chose comme oChamp.text = numero_texte dans lequel oChamp correspond au champ formatté, et numero_texte est la valeur que l'on veut injecter dans le champ.

Lors de l'exécution de la macro, le numéro d'acteur choisi s'affiche bien dans le champ formatté. Mais cela ne semble être qu'un affichage. En effet, lors de l'enregistrement, le tuple semble être sauvegardé avec un champ dont le contenu est vide.

Ma question est donc la suivante : que faut-il utiliser pour effectivement injecter une valeur dans un champ (formatté ou de texte ; cela semble être identique) ?

Merci d'éclairer ma lanterne !

TELECOM & Management SudParis 9, rue Charles Fourier 91011 Évry Cedex tél : +33 1 60 76 47 89 fax : +33 1 60 76 47 11