Se positionner dans une autre table sans relation vb2005

vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 17 oct. 2006 à 20:20
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 - 18 oct. 2006 à 20:15
Bonsoir,

J'ai 2 tables non liées par une relation  (table1 & table2)

dans table1, j'ai un champ nommé num_lieu, dans table2 j'ai plusieur champ dont 1 nommé N° (qui correspond au N° du lieu)

je souhaite en fonction de num_lieu dans table1, pour récupérer des infos sur la ligne correspondante dans table2 grace à num_lieu
je sais, vous allez me dire, fais une relation !
mais je ne souhaite pas

je pensais balayer la table 2 et m'arreter sur le N°=num_lieu et donc récupérer des infos dans certains champs de cette ligne

?

merci de vos aides

11 réponses

Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
17 oct. 2006 à 21:54
Salut, connais-tu SQL ? On peut créer un recordset avec une requete SQL sans que les tables aient des relations entre elles. Dans ton cas, ça peut ressembler en ADO à :

rst.open "select table2.* from table1, table2 where table1.num_lieu = table2.N°", cnn, ..., ...
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
17 oct. 2006 à 22:18
tb1 et tb2 est un  New ADODB.Recordset



bd1 et bd2 est un New ADODB.Connection (avec tes bases)


tb1.Open "SELECT * FROM [table1] WHERE [num_lieu] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic


 tb2.Open "SELECT * FROM [table2] WHERE [N°] like '%" & (ton numero) & "%' ", bd2, adOpenDynamic, adLockOptimistic

et aprés mise à jour
While (Not tb2.EOF)
etc.......

tb1.Update
tb2.MoveNext



Wend
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
17 oct. 2006 à 22:25
OUPS :
c'est ton champ qu'il faut mettre excuse.
tb1 et tb2 est un  New ADODB.Recordset

bd1 et bd2 est un New ADODB.Connection (avec tes bases)

tb1.Open "SELECT * FROM [champ] WHERE [num_lieu] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic

 tb2.Open "SELECT * FROM [champ] WHERE [N°] like '%" & (ton numero) & "%' ", bd2, adOpenDynamic, adLockOptimistic

et aprés mise à jour
While (Not tb2.EOF)
etc.......

tb1.Update
tb2.MoveNext

Wend
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
17 oct. 2006 à 22:36
merci, mais juste un truc, les 2 tables font partie de la même base

j'avais pensé aux requetes sql, mais je trouvais çà lourd
c un truc du genre:

1)   pointer sur num de table1
2)   pointer dans table2 sur l'enregistrement dont le champ N° est égal au champ num de table1
3)   récupérer la valeur du champ nom de la table2

ou

localiser dans table2 N°=num, retourner le champ nom de table2

bon, et si je mlets une relation entre les champs N° et num, chaque fois que je vais me déplacer dans table1, il va se déplacer dans table2, çà serait ok, mais comment je récupère la valeur du champ nom ? avec le tableadapter, le bindingsource, je ne sais ....
avec des datagridview j'arrive, mais en code direct, je ne sais pas faire

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
17 oct. 2006 à 22:54
Dans ce cas, ouvre ta base et tu ouvres 2 Recordset

tb1 et tb2 est un  New ADODB.Recordset

bd1  est un New ADODB.Connection (avec ta base)

tb1.Open "SELECT * FROM [champ] WHERE [num_lieu] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic

 tb2.Open "SELECT * FROM [champ] WHERE [N°] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic

et aprés mise à jour
While (Not tb2.EOF)
etc.......

tb1.Update
tb2.MoveNext

Wend

Mais bon, je ne vois pas bien, si tu n'as qu’une base pourquoi ne pas tout mettre à jour tout en même temps ? si tu avais un code pour voir.
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
17 oct. 2006 à 23:08
Une requete SQL c'est lourd ? Si vous le pensez, adieu Monsieur, non n'avons plus rien à nous dire.

Plus sérieusement, c'est quand même le moins lourd et le plus rapide.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
17 oct. 2006 à 23:16
oui, c pas lour je sais, ct joke :)
dans ton aide:

tb1.Open "SELECT * FROM [champ] WHERE [num_lieu] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic

 tb2.Open "SELECT * FROM [champ] WHERE [N°] like '%" & (ton numero) & "%' ", bd1, adOpenDynamic, adLockOptimistic

c plutot çà que je ferai:

 tb2.Open "SELECT * FROM [champ] WHERE [N°] like '%" & (N° de tb1) & "%' ", bd1, adOpenDynamic, adLockOptimistic

car je vais me balader dans tb1, balancer à chaque mouvement la requete, et donc pointer sur table2 au bon numéro
mais j'aimerai savoir comment récupérer alors la valeur d'un champ de tb2, c'est tout en fait.

merci.
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
18 oct. 2006 à 00:10
On Error Resume Next
While (Not tb2.EOF)
tb1!champ = tb2! champ 'variable de tb2 qui passe à tb1
tb1.Update
tb2.MoveNext


Wend
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
18 oct. 2006 à 00:20
Mais bon en SQL c'est mieux, comme dit dolphin,
rst.open "select table2.* from table1, table2 where table1.num_lieu = table2.N°", cnn, ..., ...
et tu reprends la variable.
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
18 oct. 2006 à 08:07
merci,

quand vous écrivez:
tb1!champ = tb2! champ
tb1, ou tb2 c'est quoi ?
un tableadapter, un bindingsource ?

avez-vous un exemple de code concret  mettons avec:
table1 nommée "releves", 3 champs  "num_lieu", "num_nom", "meteo"
table2 nommée "lieux", 2 champs "N°", "desi_lieu"
faisant partie de la même base access "meteo.mdb"
donc j'ai:
1 meteoDataSet, 1 relevesTableAdapter, 1 relevesBindingSource, 1 lieuxTableAdapter, 1 lieuxBindingSource, 1 relation entre num_lieu et N° nommée "releves_lieux"

merci
0
bricoyeye Messages postés 326 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 29 avril 2008 2
18 oct. 2006 à 20:15
Option Explicit
Dim tb1 As New ADODB.Recordset
Dim tb2 As New ADODB.Recordset
Dim bd As New ADODB.Connection



dans un sub:

bd.Provider = "microsoft.jet.oledb.4.0"
        bd.ConnectionString = App.Path & "nom_de ta_base" 'chemin de la base
        bd.Open
'là tu ouvres ta base

tb1.Open "SELECT * FROM [releves] WHERE [num_lieut
] like '%" & (ce_que_tu_veux) & "%' ", bd, adOpenDynamic, adLockOptimistic 'ouvre la table1 reveles qui à pour champ num_lieut quand il correspond à ce que tu veux

 tb2.Open "SELECT * FROM [lieux] WHERE [N°] like '%" & (ce_que_tu_veux) & "%' ", bd, adOpenDynamic, adLockOptimistic 'idem pour la table2
et maintemant le update de ce que tu veux faire, en sachant que:
tb1!num_lieut = tb2! N°

te donnera num_lieut(de la table1) = N°(de la table2)
Si tu veux selectionner un autre champs de ta table 1 ou 2, tu mets WHERE[TON_CHAMP]
0
Rejoignez-nous