salut
comment fait on une indirection en access ?
merci
Version imprimable
salut
comment fait on une indirection en access ?
merci
petite précision pour ceux qui ne savent pas forcément ce qu'est une indirection.
Il s'agit par ex de manipuler les propriétés d'un objet (un formulaire par ex), via une variable.
mavariable = LeFormulaire
je ferais
mavariable.recordsource = "Select...."
au lieu de:
LeFormulaire.recordsource = "Select...."
j'ai cherché dans FAQ et forum, rien trouvé.
Ca me surprend.
Et pourquoi veut tu faire ça
Si ton formulaire se nomme F1 tu peut apeller n'importe quel objet du formulaire F1 à partir d'un autre formulaire
Exemple :
Form_F1.maListe.rowSource="Select * From ...;"
Je ne te comprend pas bien.
c'est pas une réponse ca !!! lol
On fait ca dans le cas où on va parcourir une collection par ex.
Par ex, récupérer la liste des formulaires d'une appli via la table msysobjects.
donc pour éviter d'écrire x fois la même chose.
Que veux tu faire exactement ?
il y a plein de façons de faire je t'en expose une
supposons une table xx dans lesquelles j'ai
ordre typerequête sql
1 action update........
2 action insert...........
3 selection select.......
............
supposons maintenant qu'à l'aide d'un formulaire j'entre dans une autre table yy les ordres 231 et la clef de tri 1 2 3 si dans mon formulaire j'ai un bouton séquence
je lui associe le traitement suivant
ouvrir un recordset sur yy order by clef de tri
pour chaque enregistrement
je vais chercher dans xx le bon ordre
si typereqête=action
alors
runsql(sql)
sinon
openrecordset(sql)
nb j'ai fait cela une fois
me souvient plus pourquoi(alzheimer??)
à mon avis ce type d'organisation signe un pervers polymorphe caractérisé
oui ca c certain !!Citation:
Envoyé par random
je vous explique
dans la boite il y a SAGE(autant de base que de sociétés qui compose le groupe)
j'ai des cnx ODBC sur chacune des bases.
Elles sont nommées
SAGE_NomSoc1
SAGE_NomSoc2
SAGE_NomSoc3
...
SAGE_NomSocX
Je fais des liaisons de tables en auto.
Je récupère la valeur de NomSocX,
et via le code, je veux pouvoir lier en fonction de cette valeur.
Une simple concaténation ne suffit pas.
Deuxième ex:
En rouge, ce que je voudrais faire.Citation:
Dim reqSelFrm As String
Dim rstSelFrm As Recordset
Dim NomFrmTrt As String
reqSelFrm = "SELECT Name FROM MSysObjects WHERE Type = -32768"
Set rstSelFrm = db.OpenRecordset(reqSelFrm, dbOpenSnapshot)
rstSelFrm.MoveFirst
While Not rstSelFrm.EOF
NomFrmTrt = rstSelFrm!Name
NomFrnTrt.RecordSource = "Select ....."
rstSelFrm.MoveNext
Wend
rstSelFrm.Close: Set rstSelFrm = Nothing
désolé si c'est un peu fouilli.
Mais le terme d'indirection est quant à lui bien juste.
Pourtant il me semble l'avoir déjà fait il y a longtemps sous access.
ok, je comprend mieux, mais ce doit pas etre simple.
Quel type doit avoir NomFrnTrt ?Citation:
NomFrnTrt.RecordSource = "Select ....."
en fait je veux récupèrer dans une variable de type string, successivement
le nom des formulaires.
Puis modifier des propriétés des formulaires passés en variable, en me basant sur la variable(type string donc).
plutot que de vouloir bricoler les noms je te suggère de t'intérésser
aux propriétés personnalisées
ceci devrait permettre de rester de rester infiniment plus générique
d'autre part plutot que d'attaquer les tables systèmes autant passer par les collections forms ou autres
Bonjour,
Si j'ai bien compris la question, on peut tout à fait faire :
et "MonFormulaire", tu peux le remplacer par une variable string.Code:
1
2
3
4
5
6
7 Dim frm As Form Set frm = Forms("MonFormulaire") With frm .RecordSource = NomTable .RecordsetType = 0 .Caption = NomTable End With
Espérant t'avoir aidé,
tu peux en dire plus, je ne connais pas, et chque info est tjs la bienvenue.Citation:
plutot que de vouloir bricoler les noms je te suggère de t'intérésser
aux propriétés personnalisées
Tout à fait d'accord.Citation:
d'autre part plutot que d'attaquer les tables systèmes autant passer par les collections forms ou autres
Citation:
Envoyé par ActionAccess
et non, ca ne fonctionne pas.Citation:
Dim frm As Form
Set frm = Forms(rstSelFrm!Name)
With frm
.RecordSource = "select * from toto"
.RecordsetType = 0
.Caption = "pouet pouet " & rstSelFrm!Name
End With
Je précise que pour modifier les propriétés précédemment citées, il convient d'ouvrir le formulaire avant.
C'est peut-être ça qui ne fonctionne pas (en précisant la ligne en erreur et le type d'erreur, on pourrait plus facilement t'aider) ;) .
merci,
en effet, j'avais oublié, cela fonctionne comme ca.
ceci dit, la question d'ordre générique sur l' indirection est tjs en suspens.
Access(97) ne saurait pas faire?
Le code de ActionAccess est juste.A part le recordsetType qui n'est surement pas utile ici. Quant aux propriété personalisées, je te conseille :
http://warin.developpez.com/access/dao
J'ai pas compris
mavariable = LeFormulaire
je ferais
mavariable.recordsource = "Select...."
Ceci est correct du moment que mavariable est de type Form ... c'est pas une indirection mais simplement une affectation :roll:
Maintenant si mavariable est de type string, il est necessaire de passer par la collection possedant l'objet. Pas le choix
on parle habituellement d'indirection quand l'affectation est faite
non pas avec avec le contenu d'une variable mais avec l'adresse sur laquelle elle pointe
indirect(a) suppose que a contienne une adresse comme b
auquel cas indirect(a)=b
sous access la fonction n'existe pas celle qui s'en s'en rapprocherait le plus est eval
sous excel elle rend de précieux services sous la forme
indirect(adresse())
sous dos on trouve des fonctions d'indirection avec un fichier d'entrée
qui contient les paramètres d'une séquence de traitement
cela peut devenir très fun
on peut concevoir des indirections d'indirection
Mon ex du formulaire a été résolu. Certes.
ex de déf d'indirection pour un autre langage (windev):
Citation:
Les opérateurs { et } permettent d'accéder à un champ, une variable, un membre d'une classe ou une rubrique de fichier en construisant dynamiquement le nom du champ, de la variable, du membre de la classe ou de la rubrique.
L'intérêt des opérateurs { et } est multiple :
Passer en paramètre un nom de champ, de variable, de membre d'une classe ou de rubrique.
Construire le nom d'un champ, de la variable, d'un membre d'une classe ou d'une rubrique par programme.