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]/


Répondre à