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 !
--
Michel Gardie
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
Web : /http://www-public.int-evry.fr/~gardie/
Courriel : /[EMAIL PROTECTED]/