VBA jointure entre table

Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006 - 6 juil. 2005 à 10:49
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 - 6 juil. 2005 à 16:19
Bonjour,

est ce que les jointures suivantes entre les tables sont correcte ? (elle sont faite en VBA sous Outlook)

Je demande cela parce que j'ai une erreur dans mon projet et je crois
bien que c'est le dernier obstacle avant que je termine définitivement
ce projet :D Si elles sont fausses pourriez vous les corriger ? Merci
beaucoup :D



strSQL = "Select [company_name] from Actions, Sites, Companys" & _


"where Actions.[action_siteto] = Sites.[site_id]"
& _


"and Sites.[company_id] = Companys.[company_id]"
& _


"and Actions.[action_dateeche]= '" &
UserForm2.cboDateEche.Value & "' "

35 réponses

fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
6 juil. 2005 à 10:57
salut
essaye ça pour voir :
"Select company_name
from Actions
left outer join Sites on Actions.[action_siteto] = Sites.[site_id]
left outer join Companys on Actions.[action_siteto] = Sites.[site_id]
where Sites.[company_id] = Companys.[company_id] and Actions.[action_dateeche]= ' " & UserForm2.cboDateEche.Value & "' "
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 11:06
Non :( il m'affiche syntaxe incorrecte vers Outer
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 11:18
Salut,

Pour ma part je te donne 3 direction a prendre!

1 - met des espace a chaque ligne car tu les a oublié (avant le Where et avant les and)
2 - si ta table est de type access alors pour une date ce n'est pas des quotes mais des #
"and Actions.[action_dateeche]= #" & UserForm2.cboDateEche.Value & "# "
3 - vérifie pour chaque égalité de ta close where que les champs ont le même format!

si c trois points sont ok dit le moi on passera au plan B lol

Béco du PtitGrumo
0
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
6 juil. 2005 à 11:19
essaye soit en virant carrément le outer , sinon remplace outer join par inner join?
0

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

Posez votre question
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 11:27
Ptit Grumo > les 3 verifs sot faite, c'est une base de donnée SQL
Server, les espace je les ai ajouté avec les guillemet, etc... et j'ai
vérifié mes requêtes en remplacant ma variable dnas SQL Server et elles
sont corrects :D



fred.toto > ca ne marche toujours pas :(
0
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
6 juil. 2005 à 11:29
bon ben j'attends le plan B du PtiGrumo alors lol
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 11:35
Bin pour le plan B j'hésite! appeler l'agence tourisque ou essayer encore un truc!

a tu le debugger?

Tu débug et tu affiche ta variable strSQL et tu nous la recopie ici tel quelle va être executé!

Tu me suit? :)
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 11:46
Je vais te copier mon code directement pcq le debugger (debug.print) e
marchera pas vu qu'il se bloque a ma requete (je met juste le module
car c'est la ou le bas blaisse :()



Sub FilllabNomUser(txtNom As ListBox)

Dim rstNom As ADODB.Recordset

Dim strSQL As String

Dim objmyconn As ADODB.Connection

Dim strChaine As String



Set objmyconn = OpenSQLServerDB("dbauser", "dbauser")



Set rstNom = CreateObject("ADODB.RecordSet")



strSQL = "Select [company_name] from Actions" & _

"left inner join Sites on Actions.[action_siteto] = Sites.[site_id]" & _

"left inner join Companys on Actions.[action_siteto] = Sites.[site_id]" & _

"where Sites.[company_id] = Companys.[company_id]" & _

"and Actions.[action_dateeche]= ' " & UserForm2.cboDateEche.Value & "' "





rstNom.Open strSQL, objmyconn



With rstNom

.MoveFirst

If (.State = adStateOpen) And (Not (.EOF)) Then

Do Until .EOF

strChaine = .Fields("company_name")

txtNom.AddItem strChaine

.MoveNext

Loop

End If

End With





rstNom.Close

objmyconn.Close

Set rstNom = Nothing

Set objmyconn = Nothing



End Sub



C'est un peu le dawa avec les nom de variable (dus a different test :))
0
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
6 juil. 2005 à 11:52
je ne sais pas si Set rstNom = CreateObject("ADODB.RecordSet")
et Set rstNom = new ADODB.RecordSet font la meme chose, mais moi j'utilise tjs la seconde possibilité.
Sinon ça me parait pas mal moi je vois pas d'erreur flagrante
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 12:22
Si t'oubli encore les espace dans ton SQL lol fait gaffe a ca c'est le genre d'erreur sur laquelle on peu rester bloqué des semaine lol mdr!

Bon sinon!
Tu ajoute a ton formulaire une textbox quer tu appel maTxt (ou autre)
et après la fabrication de ta variable strSQL tu mets
maTxt.text = strSQL

tu lance ta fonction et tu récupère dans ta textBox ta requète SQL!
Pourquoi?
une fois que tu as au mot près la requète qui va être exécutée et bin tu peu aller dans SQL la coller et la lancer! SQL te donnera plus d'info sur le pb!
De plus ca permettra de déceler vraiment les pb de syntaxe!

A tout!

PtitGrumo
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 12:24
Sinon au passage heuuuu ....
je pense que c'est la même chose mais moi comme Fred je préfère Set rstNom = new ADODB.RecordSet
voilou :)

++
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 13:05
Beh au niveau de la requete, c'est pas vraiment le problème. Sous SQL
server elle marche (avec les where). Moi ce qui me faudrais c'est juste
la fonction qui permet de relier (comme je l'indique dans mon premier
post) mais je ne la connais pas. Je pense pas qu'il y ait une erreur
dans la requête même mais que c'est la fonction qui permet la jointure
qui est incorrect !
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
6 juil. 2005 à 13:21
Ta requête peut marcher, il n'y a pas d'erreur.

Seuleument est-ce vraiment cela que tu veux afficher.

Y a t'il des liaisons entre les tables?

Y a t'il des clés primaires qui se retrouvent en clé étrangères dans les autres tables?

Si c'est le cas, tu dois faire des join.

Mais ensuite faut voir ce que tu veux comme liaison.

Jte conseil de faire tes requêtes sous l'assistant ACCESS

Et de regarder le type de jointure qu'il offre ainsi que la syntaxe.

Il ne te restera plus qu'à faire un copier coller en remplaçant quelques trucs.
TBBUIM
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
6 juil. 2005 à 13:24
Toutefois...

Si tu regades bien tu as écris.



"blablabla blablabla" & _

"Bliblbil blbiblbi" &_ ...;



Si tu concatènes ça fait blalblalbblbilbiblb



Il semblerait qu'il manque un espace entre les lignes!

"balbalabalbna " & _

"blbilbiblbiulb " & _

Pour faire blalblalbvalgva bliblbilbiblb

TBBUIM
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 13:29
ok lol, je viens juste de comprendre le truc des espaces :D je suis
long a la detente. mais est il possible de faire des jointure en VBA
grace à Where NomTable1.ChampTable=NomTable2.ChampTable
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 13:49
oui c'est posssible!

Sinon d'après ton exemple tu sélectionne qu'un champ! Alors pourquoi vouloir faire des jointures?


strSQL = "Select [company_name] from Actions"

suffis non?

sinon essai cela
strSQL = "Select [company_name] from Actions, Sites, Companys " & _
"where Actions.[action_siteto] = Sites.[site_id] " & _
"and Sites.[company_id] = Companys.[company_id] " & _
"and Actions.[action_dateeche]= '" & UserForm2.cboDateEche.Value & "' "

Mais bon dur dur de te répondre vu que l'on ne sait pas quel sont les clé primaire ou indexe cad sur quelle table a tu le ID comme clé primaire et sur lesquel tu les a en indexe!

++

(on va y arriver sisisi on va y arrivé)


PtitGrumo
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 13:59
lol je vous remercie pour le coup de main. mais en fait je peu pas
faire sans jointure car l'idée étant que lorsque l'on selectionne la
date d'echance de la tache qui est dans la table Action, le nom de la
company envers laquelle la tache est a effectué doit s'afficher dnas
une list box (la date d'echeance se selctionne dans une combobox) et si
on part de action pour aller vers Company, il faut passer par la table
Site.



Recapitulatif des clés primaire : ACTIONS : action_id, SITES : site_id,
COMPANYS : company_id. Les clés étrangères étant celle indiqué dnas la
jointure et je veux qu'il affiche company_name. De plus, l'erreur
engendrer apres mainte et mainte test est la suivante :
[Microsoft][ODBC SQL Server Driver][SQL Server]Les tables ou les
fonctions "Sites" et "Sites" ont le même nom d'exposé. Utiliser les
noms de corrélation pour les distinguer.



Voici mon code mis a jour:



Sub FilllstNomComp(lstComp As ListBox)

Dim rstComp As ADODB.Recordset

Dim strSQL As String

Dim objmyconn As ADODB.Connection

Dim strChaine As String



Set objmyconn = OpenSQLServerDB("dbauser", "dbauser")



Set rstComp = CreateObject("ADODB.RecordSet")



strSQL = "Select [company_name] from Actions, Sites, Companys " & _


"left outer join Sites on Actions.[action_siteto] = Sites.[site_id] "
& _


"left outer join Companys on Action.[action_siteto] = Sites.[site_id] "
& _

"where Sites.[company_id] = Companys.[company_id] " & _

"and
Actions.[action_dateeche]= ' " & UserForm2.cboDateEche.Value &
"' "





rstComp.Open strSQL, objmyconn



With rstComp

.MoveFirst

If (.State = adStateOpen) And (Not (.EOF)) Then

Do Until .EOF

strChaine = .Fields("company_name")

lstComp.AddItem strChaine

.MoveNext

Loop

End If

End With





rstComp.Close

objmyconn.Close

Set rstComp = Nothing

Set objmyconn = Nothing



End Sub
0
cs_dan80 Messages postés 101 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 19 avril 2006
6 juil. 2005 à 14:25
ta essayé avec des inner join?
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
6 juil. 2005 à 14:28
oui partout ou tu as "left outer" met "inner" à la place

++

PtitGrumo
0
Fehn Messages postés 41 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 23 février 2006
6 juil. 2005 à 14:30
oui, il me dit que la syntaxe est incorrect (faut til uniquement remplacé outer par inner ?)
0
Rejoignez-nous