Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1406 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  rédation d'un SQL bien dur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

rédation d'un SQL bien dur

n°1605289
La poisse1
Posté le 28-08-2007 à 15:12:42  profilanswer
 

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!

mood
Publicité
Posté le 28-08-2007 à 15:12:42  profilanswer
 

n°1605386
olivthill
Posté le 28-08-2007 à 16:59:04  profilanswer
 

Une parenthèse a été ouverte
 
  ... ON ([Tbl_B_Hopital]....
 
mais n'a pas été refermée.

n°1605395
La poisse1
Posté le 28-08-2007 à 17:05:23  profilanswer
 

en effet oui... merci!
je vais essayer

n°1605396
MagicBuzz
Posté le 28-08-2007 à 17:05:47  profilanswer
 

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...


Message édité par MagicBuzz le 28-08-2007 à 17:06:01
n°1605398
La poisse1
Posté le 28-08-2007 à 17:07:24  profilanswer
 

je viens de l'enlever, mais il ne se passe rien de plus qu'avant... opérateur absent...

n°1605402
La poisse1
Posté le 28-08-2007 à 17:14:21  profilanswer
 

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...
 

n°1605422
MagicBuzz
Posté le 28-08-2007 à 17:27:44  profilanswer
 

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...

n°1605431
La poisse1
Posté le 28-08-2007 à 17:48:52  profilanswer
 

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.  

n°1605512
jpcheck
Pioupiou
Posté le 28-08-2007 à 22:01:34  profilanswer
 

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...

n°1605575
tegu
Posté le 29-08-2007 à 09:28:53  profilanswer
 

"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 & "'"

mood
Publicité
Posté le 29-08-2007 à 09:28:53  profilanswer
 

n°1605579
MagicBuzz
Posté le 29-08-2007 à 09:40:56  profilanswer
 

J'ai buté sur ce point aussi. Mais vu que c'est du VBA j'étais sûr de rien ^^

n°1605581
La poisse1
Posté le 29-08-2007 à 09:43:20  profilanswer
 

d'accord merci tout le monde... je teste tout ce qui a été proposé et je vous redit de suite...

n°1605583
La poisse1
Posté le 29-08-2007 à 09:46:46  profilanswer
 

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...


Message édité par La poisse1 le 29-08-2007 à 09:56:55
n°1605595
La poisse1
Posté le 29-08-2007 à 09:58:44  profilanswer
 

meme après avoir changé de format, j'ai toujours le meme message d'erreur...

n°1605642
jpcheck
Pioupiou
Posté le 29-08-2007 à 10:50:32  profilanswer
 

si tu as un chiffre pout numEPM il faut virer les quote.

n°1605646
La poisse1
Posté le 29-08-2007 à 10:54:00  profilanswer
 

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?
 
 

n°1605921
jpcheck
Pioupiou
Posté le 29-08-2007 à 16:40:41  profilanswer
 

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

n°1605959
La poisse1
Posté le 29-08-2007 à 17:43:59  profilanswer
 

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!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  rédation d'un SQL bien dur

 

Sujets relatifs
Duplication de tables entre MSDE et SQL server 2000[SQL Server] Retrouver le login / mot de passe du serveur
PB REQUETE SQL POUR SE LOGGER SUR MON SITE[SQL] Probleme avec ORDER BY
Import fichier dans SQL Server avec .batRecupere une base SQL avec *.mdf sans *.ldf ?
Le point sur les arborescences SQLSQL Loader - Insérer une valeur par défaut
Page qui s'affiche bien avec le navigateur mais mal sur le bureau[PL/SQL] Procédure Stockée
Plus de sujets relatifs à : rédation d'un SQL bien dur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR