Access : Sql & VBA
nippon1944
Messages postés
140
Date d'inscription
Statut
Membre
Dernière intervention
-
nippon1944 Messages postés 140 Date d'inscription Statut Membre Dernière intervention -
nippon1944 Messages postés 140 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis actuellement en stage en entreprise et je doit réaliser une base de donnée sur l'outillage spéficique de l'atelier.
J'en suis à coder le formulaire d'ajout d'outils, j'ai la requête suivante :
et Access me dit qu'il manque un point virgule, une idée ?
cherche aussi un idée pour simplifier cette usine à gaz, car oui, il y a pas tout les champs :/
je suis actuellement en stage en entreprise et je doit réaliser une base de donnée sur l'outillage spéficique de l'atelier.
J'en suis à coder le formulaire d'ajout d'outils, j'ai la requête suivante :
Private Sub AddOutilNew_Click() 'requete d'ajout a la base Dim Sql As String Sql = "INSERT INTO Outils (numero_plan, type, produit, poste, disponibilite)" & _ "VALUES (tbxNumPlan, cboType, cboProduit, cboPoste, cboDispo)" & _ "AND (" & _ "INSERT INTO Localisation (ou)" & _ "VALUES (tbxOu)" & _ "WHERE (Localisation.N°=Disponibilite.intule) AND (Outils.disponibilite=Disponibilite.disponibilite);" & _ ");" DoCmd.RunSQL Sql End Sub
et Access me dit qu'il manque un point virgule, une idée ?
cherche aussi un idée pour simplifier cette usine à gaz, car oui, il y a pas tout les champs :/
4 réponses
Bonsoir,
"Access me dit qu'il manque un point virgule, une idée ? "
Non, il ne manque pas un " ; ", mais il y en a deux qui ne devraient pas y être. C'est ceux de la fin de l'expression.
Quand tu convertit ta requête du mode dit "graphique" en mode SQL, Access a la sale habitude d'ajouter ce fichu " ; " à la fin de l'expression; il ne faut donc pas oublier de le retirer quand tu la recopies dans ton code.
L'expression correcte dans sa partie terminale devrait donc être:
Nonobstant la remarque de Blux, je ne vois pas bien ni l'intérêt ni la nécessité d'écrire une requête-ajout pour entrer des données dans des tables quand il suffirait de passer à la ligne suivante pour avoir le même résultat, et si il se pose un problème de clés et de liaisons entre les tables, il suffit de prévoir des contrôles (cachés) dans ton formulaire pour que les numéros se reproduisent d'une table à l'autre.
"Access me dit qu'il manque un point virgule, une idée ? "
Non, il ne manque pas un " ; ", mais il y en a deux qui ne devraient pas y être. C'est ceux de la fin de l'expression.
Quand tu convertit ta requête du mode dit "graphique" en mode SQL, Access a la sale habitude d'ajouter ce fichu " ; " à la fin de l'expression; il ne faut donc pas oublier de le retirer quand tu la recopies dans ton code.
L'expression correcte dans sa partie terminale devrait donc être:
..... =Disponibilite.disponibilite)" & ")"
Nonobstant la remarque de Blux, je ne vois pas bien ni l'intérêt ni la nécessité d'écrire une requête-ajout pour entrer des données dans des tables quand il suffirait de passer à la ligne suivante pour avoir le même résultat, et si il se pose un problème de clés et de liaisons entre les tables, il suffit de prévoir des contrôles (cachés) dans ton formulaire pour que les numéros se reproduisent d'une table à l'autre.
Salut,
pas de AND pour faire deux INSERT INTO, mais deux INSERT INTO à faire l'un après l'autre (runsql à passer deux fois)...
pas de AND pour faire deux INSERT INTO, mais deux INSERT INTO à faire l'un après l'autre (runsql à passer deux fois)...
Maintenant je me suis attelé à la requête du module de recherche, j'ai 8 listes déroulantes pour définir les critères, donc ma question est :
je fait 8 requêtes et les imbriques ou j'essaye de faire une seule requête qui prend en compte tout les choix ?
et si je fait 8 requêtes, je les imbrique comment ?
je fait 8 requêtes et les imbriques ou j'essaye de faire une seule requête qui prend en compte tout les choix ?
et si je fait 8 requêtes, je les imbrique comment ?
Merci ça j'ai vu, ma question est : c'est de type (pour savoir comment je le rentre dans la base) et accessoirement comment je peux faire pour le faire entrer à l'utilisateur.
Dans un cas idéal : en faisant genre un double clic, ça ouvre la belle boite de dialogue windows, l'utilisateur il cherche son plan (et la photo un peu plus loin mais le principe est le même), il fait "ouvrir" et là paf ça rentre le chemin d'accés du fichier dans la base; et plus tard en mode consultation double clic et paf ça ouvre le fichier direct.
Dans un cas idéal : en faisant genre un double clic, ça ouvre la belle boite de dialogue windows, l'utilisateur il cherche son plan (et la photo un peu plus loin mais le principe est le même), il fait "ouvrir" et là paf ça rentre le chemin d'accés du fichier dans la base; et plus tard en mode consultation double clic et paf ça ouvre le fichier direct.
Une question, pour afficher un résultat de recherche, il vaut mieux un sous-formulaire ou un objet de type listebox ?
la listebox ça risque de faire sale non ?
la listebox ça risque de faire sale non ?
argh, au secours, non c'est juste la position des parenthèses sur les INNER JOIN je pense
SELECT Outils.numero_plan, Type.type, Produit.produit, Secteur.secteur, Poste.poste, Disponibilite.intitule, Controle.controle, Propriete_Etat.propriete, Immobilisation.immo FROM Outils INNER JOIN Type ON Outils.type=Type.N° (INNER JOIN Produit ON Outils.produit=Produit.N° (INNER JOIN Secteur ON Outils.secteur=Secteur.N° (INNER JOIN Propriete_Etat ON Outils.propriete_Etat.Propriete_Etat (INNER JOIN Immobilisation ON Outils.immobilisation=Immobilisation.N°)))) WHERE (((Outils.type)=[cboRechercheType])) OR (((Outils.produit)=[cboRechercheProduit])) OR (((Outils.secteur)=[cboRechercheSecteur])) OR (((Outils.poste)=[cboRecherchePoste])) OR (((Outils.disponibilite)=[cboRechercheDisponibilite])) OR (((Outils.controle)=[cboRechercheControle])) OR (((Outils.propriete_etat)=[cboRechercheEtat])) OR (((Outils.immobilisation)=[cboRechercheImmo])) ORDER BY Outils.numero_plan;
la syntaxe la plus simple et la plus claire que j'ai pu trouver est
SELECT NOM, PRENOM, AGE, MARQUE, COULEUR FROM PERSONNES INNER JOIN PERSONNE_VOITURE ON ID_PERSONNE = PERSONNE_ID INNER JOIN VOITURES ON ID_VOITURE = VOITURE_ID INNER JOIN COULEURS ON ID_COULEUR = COULEUR_ID WHERE ID_PERSONNE = 3pourtant je fait ma requête il me dit opérateur manquant dans les INNER JOIN...
Le bouquin où j'ai appris ça est: "Le Grand Livre Access 2002" chez Micro-Application. Ou bien "Access VBA pour les Nuls"
J'ai toujours fait comme indiqué.
Maintenant, je ne prétends pas que c'est l'Evangile.
merci à tout les deux pour vos réponses, j'ai oublié de préciser que je travaille avec Access 2010.
J'ai mis un " ; " à la fin de la requête cela fonctionne, ne vous battez pas :)
J'ai créé la requête "à la main", je connais les bases en Sql, amateur éclairé dirons-nous, et je sais pas me servir de l'assistant Access. Je me suis déjà servi d'Access mais ça faisait 3 ans que j'y avait pas touché donc les souvenirs sont loin :/
J'ai décomposer ma requête en tapant les mots clés puis les champs un par un puis fait un essai d'ajout, presque tout mes champs fonctionnent, le truc c'est que le deuxième INSERT ne fonctionne pas.
Fais un Msgbox avant et tu verras qu'elle a une structure particulière...
Je veux bien essayer de faire plus simple mais comme personne peux m'aider sur mon lieu de stage il me reste que le net pour me dépanner.