rédation d'un SQL bien dur - VB/VBA/VBS - Programmation
Marsh Posté le 28-08-2007 à 16:59:04
Une parenthèse a été ouverte
... ON ([Tbl_B_Hopital]....
mais n'a pas été refermée.
Marsh Posté le 28-08-2007 à 17:05:47
pitaing !
effectivement le coup de la parenthèse ça devrait aider pas mal
par contre, déjà, trois trucs :
1/ sors le SQL de ton code VB, ça sera bien plus lisible
2/ vite les [ ] qui sont absolument inutiles ici
3/ je suis sur qu'en simplifiant le nom des tables/champs (genre notation hongroise) ça ira vachement mieux pour améliorer la lisibilié*
* mais bon, c'est vrai que si t'as déjà une application à moitié écrite c'est plus chaud à faire...
Marsh Posté le 28-08-2007 à 17:07:24
je viens de l'enlever, mais il ne se passe rien de plus qu'avant... opérateur absent...
Marsh Posté le 28-08-2007 à 17:14:21
l'appli est écrite a 85% et je la met en route jeudi avant depart en vacances...
c'est cho... en fait c'est pour mettre a jour un sous formulaire qui liste tous les appareils en fonction de l' "EPM". et le sql, sorti de VB, est dejà écrit dans une requete, et marche très bien.
c'est en fait un formulaire de recherche: en fonction de la valeur choisie dans une zone de liste, le sous formulaire suivant se met a jour automatiquement et prend en compte la valeur selectionnée plus haut. mais les liens entre ce que j'affiche et ce qui m'interesse sont indirects, et passent par 5tables différentes. d'ou le mic mac en VB...
Marsh Posté le 28-08-2007 à 17:27:44
aucune idée de ce qui provoque ton problème.
le seul truc qui m'étonne, c'est que tu envoies directement une requête SQL à RecordSource, mais je ne connais pas du tout VBA...
Marsh Posté le 28-08-2007 à 17:48:52
et moi non plus! j'ai tenté une interpretation de ce que je faisais en mettant a jours deux listbox, l'une en fonction de l'autre... et ca donne ca.
Marsh Posté le 28-08-2007 à 22:01:34
petite idée pour aider :
fais un debug.print avant de mettre ton recordsource,
et vérifie que si tu effectues cette requete dns une requete bidon access ca pointe sur une erreur ou non...
Marsh Posté le 29-08-2007 à 09:28:53
"WHERE [Tbl_A1_EPM].[NomEPM] = Lst_EPM.Value" |
Ta clause WHERE me semble poser problème.
Il faut sortir « Lst_EPM.Value » des guillemets en faisant une concaténation :
"WHERE [Tbl_A1_EPM].[NomEPM] = " & Lst_EPM.Value |
Si le contenu est du String il faut aussi ajouter des quotes entourant cette valeur
"WHERE [Tbl_A1_EPM].[NomEPM] = '" & Lst_EPM.Value & "'" |
Marsh Posté le 29-08-2007 à 09:40:56
J'ai buté sur ce point aussi. Mais vu que c'est du VBA j'étais sûr de rien ^^
Marsh Posté le 29-08-2007 à 09:43:20
d'accord merci tout le monde... je teste tout ce qui a été proposé et je vous redit de suite...
Marsh Posté le 29-08-2007 à 09:46:46
jp, j'ai pas tout suivi a propos de faire une requete bidon, comment je fais ca?
voici ce que j'ai fait:
Le CODE:
SQL = "SELECT [Tbl_E2_Installation_Appareil].[ModèleInstall], [Tbl_E2_Installation_Appareil].[NumSerieInstall], [Tbl_F2_CQ_NivB].[EcheanceControle],[Tbl_F2_CQ_NivB].[DateRDV1], [Tbl_F2_CQ_NivB].[DateRédaction], [Tbl_A1_EPM].[NomEPM], [Tbl_A1_EPM].[NumEPM] "
SQL = SQL & "FROM [Tbl_A1_EPM] INNER JOIN [Tbl_B_Hopital] ON [Tbl_A1_EPM].[NumEPM] = [Tbl_B_Hopital].[NumEPM] "
SQL = SQL & "INNER JOIN [Tbl_C2_Service] ON [Tbl_B_Hopital].[NumHopital] = [Tbl_C2_Service].[NumHopital] "
SQL = SQL & "INNER JOIN [Tbl_D2_Salle] ON [Tbl_C2_Service].[NumService] = [Tbl_D2_Salle].[NumService] "
SQL = SQL & "INNER JOIN [Tbl_E2_Installation_Appareil] ON [Tbl_D2_Salle].[NumSalle] = [Tbl_E2_Installation_Appareil].[NumSalle] "
SQL = SQL & "INNER JOIN [Tbl_F2_CQ_NivB] ON [Tbl_E2_Installation_Appareil].[NumInstallation] = [Tbl_F2_CQ_NivB].[NumInstallation] "
SQL = SQL & "WHERE [Tbl_A1_EPM].[NumEPM] = '" & Me.Lst_EPM.Value & "'"
Debug.Print SQL
Form_Tbl_F2_CQ_NivB.RecordSource = SQL
Le DEBUG.PRINT:
SELECT [Tbl_E2_Installation_Appareil].[ModèleInstall], [Tbl_E2_Installation_Appareil].[NumSerieInstall], [Tbl_F2_CQ_NivB].[EcheanceControle],[Tbl_F2_CQ_NivB].[DateRDV1], [Tbl_F2_CQ_NivB].[DateRédaction], [Tbl_A1_EPM].[NomEPM], [Tbl_A1_EPM].[NumEPM] FROM [Tbl_A1_EPM] INNER JOIN [Tbl_B_Hopital] ON [Tbl_A1_EPM].[NumEPM] = [Tbl_B_Hopital].[NumEPM] INNER JOIN [Tbl_C2_Service] ON [Tbl_B_Hopital].[NumHopital] = [Tbl_C2_Service].[NumHopital] INNER JOIN [Tbl_D2_Salle] ON [Tbl_C2_Service].[NumService] = [Tbl_D2_Salle].[NumService] INNER JOIN [Tbl_E2_Installation_Appareil] ON [Tbl_D2_Salle].[NumSalle] = [Tbl_E2_Installation_Appareil].[NumSalle] INNER JOIN [Tbl_F2_CQ_NivB] ON [Tbl_E2_Installation_Appareil].[NumInstallation] = [Tbl_F2_CQ_NivB].[NumInstallation] WHERE [Tbl_A1_EPM].[NumEPM] = '3'
j'ai toujours la meme erreur malgré tout:
Erreur d'execution 3075 Erreur de syntaxe (opérateur absent) dans L'expresion:
'[Tbl_A1_EPM].[NumEPM] = [Tbl_B_Hopital].[NumEPM] INNER JOIN [Tbl_C2_Service] ON [Tbl_B_Hopital].[NumHopital] = [Tbl_C2_Service].[NumHopital] INNER JOIN [Tbl_D2_Salle] ON [Tbl_C2_Service].[NumService] = [Tbl_D2_Salle].[NumService] INNER JOIN [Tbl_E2_Instal'
voila....
mais il y a un truc bizare: la valeur retournée par Lst_EPM est un nombre... alors que ce devrait etre un nom. du coup il faut que je change de concaténation pour le rendre compatible a un format numérique...
Marsh Posté le 29-08-2007 à 09:58:44
meme après avoir changé de format, j'ai toujours le meme message d'erreur...
Marsh Posté le 29-08-2007 à 10:54:00
oui, c'est ce que j'ai fait, j'ai repris la deuxième ligne de tegu.
mais l'errer est toujours la meme... dois-je remettre les parenthèses autour de tous les Inner join? les crochets je peux les garder ou pas?
Marsh Posté le 29-08-2007 à 16:40:41
tu peux essayer le paréenthèsage à fond oui, mais sinon pour le test, mets la requete qui sort du debug.print dans access, dans 'requêtes' pour voir à quel endroit il pond l'erreur (endroit où le curseur de la souris se placera si la requete est foireuse)µ.
Tu vois de quoi je parle ?
JP
Marsh Posté le 29-08-2007 à 17:43:59
a tenter en effet... personellement, vu que je dois donner la base demain matin et que j'ai demandé a séniorpapou, de ce meme forum, de l'aide, j'ai maintenant un truc qui marche... comment, j'ai pas tout saisi, mais ca marche... mais la route est encore longue avant que la base soit finie, donc je testerai cela plus tard, pour ma culture perso... merci a tous!
Marsh Posté le 28-08-2007 à 15:12:42
voila, j'aurai besoin d'écrire proprement ce code SQL sous VBA, et je n'y arrive pas... si vous pouvez m'aider, ce serai bien simpa!
SQL = "SELECT [Tbl_E2_Installation_Appareil].[ModèleInstall], [Tbl_E2_Installation_Appareil].[NumSerieInstall], [Tbl_F2_CQ_NivB].[EcheanceControle],[Tbl_F2_CQ_NivB].[DateRDV1], [Tbl_F2_CQ_NivB].[DateRédaction], [Tbl_A1_EPM].[NomEPM], [Tbl_A1_EPM].[NumEPM] "
SQL = SQL & "FROM [Tbl_A1_EPM] INNER JOIN [Tbl_B_Hopital] ON [Tbl_A1_EPM].[NumEPM] = [Tbl_B_Hopital].[NumEPM] "
SQL = SQL & "INNER JOIN [Tbl_C2_Service] ON ([Tbl_B_Hopital].[NumHopital] = [Tbl_C2_Service].[NumHopital] "
MsgBox SQL
SQL = SQL & "INNER JOIN [Tbl_D2_Salle] ON [Tbl_C2_Service].[NumService] = [Tbl_D2_Salle].[NumService] "
SQL = SQL & "INNER JOIN [Tbl_E2_Installation_Appareil] ON [Tbl_D2_Salle].[NumSalle] = [Tbl_E2_Installation_Appareil].[NumSalle] "
SQL = SQL & "INNER JOIN [Tbl_F2_CQ_NivB] ON [Tbl_E2_Installation_Appareil].[NumInstallation] = [Tbl_F2_CQ_NivB].[NumInstallation] "
SQL = SQL & "WHERE [Tbl_A1_EPM].[NomEPM] = Lst_EPM.Value"
Form_Tbl_F2_CQ_NivB.RecordSource = SQL
l'erreur qui apparait est "opérateur absent"
merci d'avance!