Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment faire un FindFirst

6 réponses
Avatar
Jacques
Bonjour,

Dans ma table( rs) j=92ai un champ NomFamille=3D "Durand" et un champ
Pr=E9non=3D"Gisele"
Dans une autre table (rs1) j=92ai un champ NomPr=E9non =3D "Durand Gisele"

Comment faire un rs.FindFirst, j=92ai essay=E9 comme cela mais =E7a ne
marche pas.

rs.FindFirst "[NomFamille]&""&[Pr=E9nom]=3D" & rs1("NomPr=E9nom")
rs.NoMatch

Merci pour votre aide.

Salutations

6 réponses

Avatar
Gloops
Bonjour,

Jacques a écrit, le 27/07/2008 15:09 :
Bonjour,

Dans ma table( rs) j’ai un champ NomFamille= "Durand" et un champ
Prénon="Gisele"
Dans une autre table (rs1) j’ai un champ NomPrénon = "Durand Gise le"

Comment faire un rs.FindFirst, j’ai essayé comme cela mais ça ne
marche pas.

rs.FindFirst "[NomFamille]&""&[Prénom]=" & rs1("NomPrénom")




rs1.FindFirst "NomPrénon='" + Rs.NomFamille + " " + Rs.Prénon + "'"

(en gardant l'orthographe du nom du champ n'est-ce pas ...)

Dans l'autre sens, pour Durand Gisele il n'y a aucun problème.
Pour "Durand Dupont des Isigny de la Martinière d'Angore Henri Jacques
Bernard", ça promet d'être plus coton, d'où l'intérêt de champs séparés.

Voyons maintenant comment on va retrouver Ginette, ah non pardon, Gisèl e
Durand.

rs1.FindFirst "NomPrénon = 'Durand Gisele'"
If Rs1.NoMatch Then
MsgBox "C'est les vacances : " + _
"Gisèle s'est fait la male de la première table"
Exit Sub 'ou Exit Function selon le cas
'en n'oubliant pas de fermer ce qu'il y a à fermer
End If

' Trève de galéjades ;)

spl = Split(Replace(Rs1!NomPrénon, "'", "''"), " ")

Rs.FindFirst "NomFamille='" + spl(0) + "' AND Prénom='" + spl(1) + "'"

If Rs.NoMatch Then
'On n'a pas trouvé
Else
'On a trouvé
Endif

Bien entendu, l'autre personnage ne sera trouvé dans Rs que si on lui a
donné là le prénom Dupont, ce qui ne manquera pas de présenter ce rtains
problèmes.

Au passage, j'insiste sur la nécessité de faire très attention de n e
JAMAIS employer de caractère accentué ni d'espace dans les noms de
champs ni les noms de tables. ça va passer sur une plateforme, et le
jour où on voudra migrer, on peut être tranquille que ça a au moins une
chance sur deux de bloquer. Indépendamment du fait qu'écrire prénom dans
une table et prénon dans l'autre, ce n'est pas non plus pour éviter l es
erreurs.

Après, on peut ajouter des préfixes aux noms de champs pour précise r
dans quelles tables ils se trouvent, enfin là je sors du sujet.


Histoire d'être plus lisible, je sors l'apostrophe dans une variable :

strG = "'"
Rs.FindFirst "NomFamille=" + strG + spl(0) + strG + _
" AND Prénom=" + strG + spl(1) + strG


ce qui permet aussi d'écrire, plus haut :

spl = Split(Replace(Rs1!NomPrénon, strG, strG + strG), " ")



*

Maintenant, une autre façon de prendre le problème. Si on a une table
avec le nom et le prénom séparés dans deux champs, c'est que ce tra vail
de séparation a été fait (à supposer que les deux tables présen tent les
mêmes personnes avec les noms et prénoms orthographiés pareil), et il
serait donc intéressant d'en tirer parti.

S'assurer que la table qui comporte deux champs pour le nom et le préno m
comporte un champ d'index (un numéro automatique par exemple), créer un
champ de même type dans l'autre table pour recevoir cette information.
Parcourir la première table en séquentiel, et pour chaque enregistrem ent
chercher l'équivalent de l'autre côté (voir ma première réponse ), et là,
inscrire l'index de la première table dans le champ qui a été cré é à cet
effet.
Ainsi, quand on voudra chercher dans la première table une personne
désignée dans la deuxième, c'est par le numéro d'index qu'on la t rouvera.

*

On peut poursuivre le sujet en signalant qu'en France il est courant de
désigner les gens par un prénom et un nom, parfois précédé d'un titre
(Monsieur ou Madame étant courants), mais que dans d'autres pays on a
aussi besoin d'ajouter un suffixe, quelque chose qui vient après le nom ,
et que ceci n'est qu'un exemple. A telle enseigne que j'ai vu quelque
part proposer un composant pour générer un tableau pour recevoir les
informations pour dénommer une personne, ce tableau étant à initial iser
en installant la base dans un nouveau pays.
Avatar
3stone
Salut,

Jacques a écrit, le 27/07/2008 15:09 :
Bonjour,

Dans ma table( rs) j’ai un champ NomFamille= "Durand" et un champ
Prénon="Gisele"
Dans une autre table (rs1) j’ai un champ NomPrénon = "Durand Gisele"

Comment faire un rs.FindFirst, j’ai essayé comme cela mais ça ne
marche pas.

rs.FindFirst "[NomFamille]&""&[Prénom]=" & rs1("NomPrénom")




Essaie :

rs.FindFirst "[NomFamille]" & " " & "[Prénom]=" & rs1("[NomPrénom]")


Note:
Sauf en cas de bricole exeptionnelle, tu ne peux pas avoir un tel
amalgame dans une même base...



@Gloops:

| rs1.FindFirst "NomPrénon='" + Rs.NomFamille + " " + Rs.Prénon + "'"

Pas bien compris ou tu allais... ;-)
mais le signe de concaténation est définitivement le signe '&'
Le digne '+' (plus) induit un comportement non souhaité en général.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Jacques
On 29 juil, 03:51, "3stone" wrote:
Salut,

> Jacques a écrit, le 27/07/2008 15:09 :
> Bonjour,

> Dans ma table( rs) j’ai un champ NomFamille= "Durand" et un champ
> Prénon="Gisele"
> Dans une autre table (rs1) j’ai un champ NomPrénon = "Durand Gise le"

> Comment faire un rs.FindFirst, j’ai essayé comme cela mais ça ne
> marche pas.

> rs.FindFirst "[NomFamille]&""&[Prénom]=" & rs1("NomPrénom")

Essaie :

rs.FindFirst "[NomFamille]" & " " & "[Prénom]=" & rs1("[NomPrénom]" )

Note:
Sauf en cas de bricole exeptionnelle, tu ne peux pas avoir un tel
amalgame dans une même base...

@Gloops:

| rs1.FindFirst "NomPrénon='" + Rs.NomFamille + " " + Rs.Prénon + " '"

Pas bien compris ou tu allais... ;-)
mais le signe de concaténation est définitivement le signe '&'
Le digne '+' (plus) induit un comportement non souhaité en général.

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



Bonjour Pierre,

Oui en effet c'etait un cas de bricolle Exeptionnelle,
et la reflexion de Gloops ma était utile.

"Maintenant, une autre façon de prendre le problème. Si on a une
table
avec le nom et le prénom séparés dans deux champs, c'est que ce
travail
de séparation a été fait (à supposer que les deux tables présente nt
les
mêmes personnes avec les noms et prénoms orthographiés pareil), et il
serait donc intéressant d'en tirer parti. "

Merci pour votre aide.

Salutations.
Avatar
3stone
Salut,

"Jacques"
[...]
"Maintenant, une autre façon de prendre le problème. Si on a une
table avec le nom et le prénom séparés dans deux champs, c'est que ce
travail de séparation a été fait


Le mieux est d'éviter ce genre d'erreur dès la conception...


(à supposer que les deux tables présentent les
mêmes personnes avec les noms et prénoms orthographiés pareil), et il
serait donc intéressant d'en tirer parti. "


Et on ne peut pas (ne devrait pas) non plus, avoir 2 fois les noms et
prénoms dans une même base...

Sauf en cas de TDHE au lieu de SGBDR...

TDHE : Tas de Données Hétéroclites et Eparses (c)3stone ;-)
SGBDR : Système de Gestion de Bases de Données Relationnelles

:o))

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Gloops
3stone a écrit, le 01/08/2008 17:19 :
Et on ne peut pas (ne devrait pas) non plus, avoir 2 fois les noms et
prénoms dans une même base...

Sauf en cas de TDHE au lieu de SGBDR...

TDHE : Tas de Données Hétéroclites et Eparses (c)3stone ;-)
SGBDR : Système de Gestion de Bases de Données Relationnelles

:o))




Si tu savais le marché qu'il y a sur la migration des TDHE vers les
SGBDR ... :)

Et encore, parfois, il faut freiner le client pour qu'il évite d'ajoute r
n'importe quoi n'importe où en cours de route. Enfin là, heureusement ,
c'est le cas extrême. Il vaudrait mieux que ce genre de client ne se
retrouve pas en tête à tête avec un informaticien débutant, ou il s sont
fichus tous les deux.
Avatar
Gloops
3stone a écrit, le 29/07/2008 03:51 :
@Gloops:

| rs1.FindFirst "NomPrénon='" + Rs.NomFamille + " " + Rs.Prénon + "'"

Pas bien compris ou tu allais... ;-)
mais le signe de concaténation est définitivement le signe '&'
Le digne '+' (plus) induit un comportement non souhaité en généra l.




Il est vrai que le & concatène des variants, ce qui est bien pratique
parce que ça évite d'avoir à faire les conversions explicites.

Les gens qui ont développé sous Access 95 des bases qui devaient auss i
tourner avec Access 97 et 2000 savent pourquoi j'ai pris l'habitude de
réaliser des conversions explicites et concaténer non des variants ma is
des chaînes de caractères (avec +, donc). Je te concède que ça ri sque de
finir par se faire rare, maintenant, ce genre de demande.

Et puis après tout tant mieux, parce que la syntaxe à employer dans c e
contexte est du genre :

Rs1.FindFirst "NbEnfants = " + VBA.Str$(NbEnfants)

Enfin un truc léger, quoi :)

Quand on est sûr que la base n'aura pas à être migrée, on trouve ça bien
de se contenter de
Rs1.FindFirst "NbEnfants = " & NbEnfants