Difficultés avec la composition d'un SQL en VBA
Résolu/Fermé
BiankaBo
Messages postés
68
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
24 septembre 2024
-
6 avril 2020 à 23:00
yg_be Messages postés 23400 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 décembre 2024 - 7 avril 2020 à 23:05
yg_be Messages postés 23400 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 décembre 2024 - 7 avril 2020 à 23:05
A voir également:
- Difficultés avec la composition d'un SQL en VBA
- Find vba - Astuces et Solutions
- Sql lister les tables ✓ - Forum Programmation
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Blob sql ✓ - Forum Webmastering
5 réponses
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 711
Modifié le 7 avril 2020 à 08:28
Modifié le 7 avril 2020 à 08:28
Bonjour,
Pas besoin de replace, il faut simplement mettre des ' devant et apres votre variable.
Par contre, chez moi erreur des la variable strSQLWHERE.
Apres des corrections que je pense justes( les spécialistes corrigeront) , toujours erreur:
Pour tester, j'ai pris le resultat StrSQL et cree une requete SQL (plus simple a modifier)
<code basic>SELECT [06-ALLOCATIONS_BUDGET].No_AL, [05-MESURES].NoRM_ME, [04-REGROUPEMENTS_M].Titre_RM,[06-ALLOCATIONS_BUDGET].NoME_AL, [05-MESURES].Titre_ME, [NoME_AL] - [Titre_ME] AS Expr1, [06-ALLOCATIONS_BUDGET].NoET_AL, [06-ALLOCATIONS_BUDGET].BudCal_AL,[NoRM_ME] - [Titre_RM] AS Expr2
FROM [04-REGROUPEMENTS_M] INNER JOIN [05-MESURES] ON [04-REGROUPEMENTS_M].No_RM = [05-MESURES].NoRM_ME
INNER JOIN [06-ALLOCATIONS_BUDGET]ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL
WHERE [06-ALLOCATIONS_BUDGET].NoET_AL='100' AND [06-ALLOCATIONS_BUDGET].BudCal_AL)<>0;
<code>
Pas besoin de replace, il faut simplement mettre des ' devant et apres votre variable.
Par contre, chez moi erreur des la variable strSQLWHERE.
Apres des corrections que je pense justes( les spécialistes corrigeront) , toujours erreur:
Pour tester, j'ai pris le resultat StrSQL et cree une requete SQL (plus simple a modifier)
<code basic>SELECT [06-ALLOCATIONS_BUDGET].No_AL, [05-MESURES].NoRM_ME, [04-REGROUPEMENTS_M].Titre_RM,[06-ALLOCATIONS_BUDGET].NoME_AL, [05-MESURES].Titre_ME, [NoME_AL] - [Titre_ME] AS Expr1, [06-ALLOCATIONS_BUDGET].NoET_AL, [06-ALLOCATIONS_BUDGET].BudCal_AL,[NoRM_ME] - [Titre_RM] AS Expr2
FROM [04-REGROUPEMENTS_M] INNER JOIN [05-MESURES] ON [04-REGROUPEMENTS_M].No_RM = [05-MESURES].NoRM_ME
INNER JOIN [06-ALLOCATIONS_BUDGET]ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL
WHERE [06-ALLOCATIONS_BUDGET].NoET_AL='100' AND [06-ALLOCATIONS_BUDGET].BudCal_AL)<>0;
<code>
yg_be
Messages postés
23400
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2024
Ambassadeur
1 557
Modifié le 7 avril 2020 à 09:31
Modifié le 7 avril 2020 à 09:31
bonjour, tu te poses les bonnes questions.
je pense que ce n'est pas une bonne idée de modifier ainsi les requêtes. cela ne va pas fonctionner correctement, et ce n'est pas nécessaire.
tu n'as pas donné une vue d'ensemble de ce que tu fais.
donc j'imagine que l'utilisateur passe par un formulaire pour s'identifier. ce formulaire serait le mystérieux "endroit qui le ramène à sa plateforme", dont tu ne nous dis rien.
ce formulaire pourrait ouvrir l'état en filtrant les données, tenant compte de l'utilisateur.
explications ici: https://docs.microsoft.com/fr-ch/office/vba/access/concepts/forms-design/apply-a-filter-when-opening-a-form-or-report
je pense que ce n'est pas une bonne idée de modifier ainsi les requêtes. cela ne va pas fonctionner correctement, et ce n'est pas nécessaire.
tu n'as pas donné une vue d'ensemble de ce que tu fais.
donc j'imagine que l'utilisateur passe par un formulaire pour s'identifier. ce formulaire serait le mystérieux "endroit qui le ramène à sa plateforme", dont tu ne nous dis rien.
ce formulaire pourrait ouvrir l'état en filtrant les données, tenant compte de l'utilisateur.
explications ici: https://docs.microsoft.com/fr-ch/office/vba/access/concepts/forms-design/apply-a-filter-when-opening-a-form-or-report
BiankaBo
Messages postés
68
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
24 septembre 2024
7 avril 2020 à 15:52
7 avril 2020 à 15:52
Bonjour à vous! :)
Merci beaucoup pour ta réponse f894009!
Toutefois, je crois que je vais poursuivre dans la simplicité en étudiant la suggestion de yg_be.
Donc, tu me parles de filtrer mon état sur la donnée que je veux et ta méthode fonctionne parfaitement!! J'aurais dû y penser, j'ai fait ça partout dans le reste de ma base de données.. Mercii!! :D
Mon mystérieux formulaire est celui qui porte le nom de "01_01-LOGIN" (désolée j'avais omis de partager ce détail). Lorsque l'utilisateur inscrit son mot de passe (qui est "Bonjour" pour tout le monde pour l'instant) et appuie sur OK, mon vba valide si toutes les informations sont bonnes puis, si tout semble correct, un message s'ouvre puis la plateforme s'ouvre également selon le numéro qui lui est associé.
Cependant, j'ai omis de préciser un détail que j'avais oublié de mentionner:
Ma requête "08_00-CHOIX_ALLOC_TABLE" me sert aussi à diriger les données à afficher dans les listes déroulantes de certains de mes formulaires et sous-formulaires. Par exemple: le formulaire "08_01M-SAISIR_SAL_RÉGUL_PE" où le sous-formulaire de la section ATTRIBUTION DE MESURES présente des listes déroulantes dont les choix proposés doivent être ceux qui sont exclusivement associés au numéro de l'utilisateur..
Est-il possible d'appliquer un filtre du même type pour mes listes déroulante dans un formulaire ou un sous-formulaire?
Merci beaucoup!!! :)
Merci beaucoup pour ta réponse f894009!
Toutefois, je crois que je vais poursuivre dans la simplicité en étudiant la suggestion de yg_be.
Donc, tu me parles de filtrer mon état sur la donnée que je veux et ta méthode fonctionne parfaitement!! J'aurais dû y penser, j'ai fait ça partout dans le reste de ma base de données.. Mercii!! :D
Mon mystérieux formulaire est celui qui porte le nom de "01_01-LOGIN" (désolée j'avais omis de partager ce détail). Lorsque l'utilisateur inscrit son mot de passe (qui est "Bonjour" pour tout le monde pour l'instant) et appuie sur OK, mon vba valide si toutes les informations sont bonnes puis, si tout semble correct, un message s'ouvre puis la plateforme s'ouvre également selon le numéro qui lui est associé.
Cependant, j'ai omis de préciser un détail que j'avais oublié de mentionner:
Ma requête "08_00-CHOIX_ALLOC_TABLE" me sert aussi à diriger les données à afficher dans les listes déroulantes de certains de mes formulaires et sous-formulaires. Par exemple: le formulaire "08_01M-SAISIR_SAL_RÉGUL_PE" où le sous-formulaire de la section ATTRIBUTION DE MESURES présente des listes déroulantes dont les choix proposés doivent être ceux qui sont exclusivement associés au numéro de l'utilisateur..
Est-il possible d'appliquer un filtre du même type pour mes listes déroulante dans un formulaire ou un sous-formulaire?
Merci beaucoup!!! :)
f894009
Messages postés
17206
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 novembre 2024
1 711
7 avril 2020 à 15:57
7 avril 2020 à 15:57
Re,
Toutefois, je crois que je vais poursuivre
Y a pas d'lezard, vous etes entre de bonnes mains avec yb_be
Bye..
Toutefois, je crois que je vais poursuivre
Y a pas d'lezard, vous etes entre de bonnes mains avec yb_be
Bye..
yg_be
Messages postés
23400
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2024
1 557
7 avril 2020 à 16:52
7 avril 2020 à 16:52
je ne vois pas ce qui empêche de faire presque la même chose n'importe où. à quel endroit cela te semble-t'il difficile?
pour "connaitre" partout l'identité de l'utilisateur (son numéro), je suggère de faire de strNoET une variable globale, utilisable partout.
pour cela,
1) éliminer la déclaration
2) ajouter une déclaration
en passant, je recommande fortement d'ajouter
pour "connaitre" partout l'identité de l'utilisateur (son numéro), je suggère de faire de strNoET une variable globale, utilisable partout.
pour cela,
1) éliminer la déclaration
strNoET As Stringdans le formulaire LOGIN
2) ajouter une déclaration
Public strNoET As Stringau début d'un module "normal", tel que le module SOURIS_MAIN, en dehors d'une sub ou function
en passant, je recommande fortement d'ajouter
option explicitau début de chaque module, cela va t'aider à détecter des erreurs. de même, je recommande de régulièrement compiler ton code.
BiankaBo
Messages postés
68
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
24 septembre 2024
7 avril 2020 à 15:56
7 avril 2020 à 15:56
Voici ma base de données à jour:
https://drive.google.com/file/d/1OvSwQykrazGF05etbtfAzeYdTR5020hh/view?usp=sharing
https://drive.google.com/file/d/1OvSwQykrazGF05etbtfAzeYdTR5020hh/view?usp=sharing
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
BiankaBo
Messages postés
68
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
24 septembre 2024
7 avril 2020 à 21:19
7 avril 2020 à 21:19
D'accord, alors j'ai corrigé mon module et j'ai mis
Je n'ai pas essayé ta suggestion pour l'instant, parce que j'ai trouvé quelque chose entre-temps et j'aimerais que tu me dises si c'est bien ou pas. Je pense que ça ressemble beaucoup à ton principe de "variable globale".
En fait, j'ajouté dans mon formulaire LOGIN la création d'une variable temporaire.
Donc, à la connexion d'un utilisateur, lorsque tout est valide, tous les états requis s'ouvrent et le numéro que je souhaite conserver durant toute la session vient se stocker comme variable temporaire.
Par la suite, dans les formulaires requis, j'ai ajouté ma variable temporaire comme condition WHERE dans le contenu de ma liste déroulante. Tout semble fonctionner parfaitement.
Je pourrais même utiliser cette variable temporaire pour l'ouverture de mes états selon moi (ma question de départ).
Peux-tu me dire si c'est une bonne solution selon toi? Ou je devrais utiliser ta suggestion plutôt?
Et si deux utilisateurs ou plus sont dans ma base de données en même temps, est-ce que ça va affecter ma variable temporaire à la connexion de chacun d'entre eux ou c'est propre à chaque session/ordinateur des utilisateurs?
Voilà ce que j'ai fait:
https://drive.google.com/file/d/1AWn0bs8xyYRH4iCbfr0eF7ZKjvqSglBA/view?usp=sharing
Merci beaucoup!! :)
Option Explicitau début.
Je n'ai pas essayé ta suggestion pour l'instant, parce que j'ai trouvé quelque chose entre-temps et j'aimerais que tu me dises si c'est bien ou pas. Je pense que ça ressemble beaucoup à ton principe de "variable globale".
En fait, j'ajouté dans mon formulaire LOGIN la création d'une variable temporaire.
Donc, à la connexion d'un utilisateur, lorsque tout est valide, tous les états requis s'ouvrent et le numéro que je souhaite conserver durant toute la session vient se stocker comme variable temporaire.
Par la suite, dans les formulaires requis, j'ai ajouté ma variable temporaire comme condition WHERE dans le contenu de ma liste déroulante. Tout semble fonctionner parfaitement.
Je pourrais même utiliser cette variable temporaire pour l'ouverture de mes états selon moi (ma question de départ).
Peux-tu me dire si c'est une bonne solution selon toi? Ou je devrais utiliser ta suggestion plutôt?
Et si deux utilisateurs ou plus sont dans ma base de données en même temps, est-ce que ça va affecter ma variable temporaire à la connexion de chacun d'entre eux ou c'est propre à chaque session/ordinateur des utilisateurs?
Voilà ce que j'ai fait:
https://drive.google.com/file/d/1AWn0bs8xyYRH4iCbfr0eF7ZKjvqSglBA/view?usp=sharing
Merci beaucoup!! :)
yg_be
Messages postés
23400
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 décembre 2024
1 557
7 avril 2020 à 23:05
7 avril 2020 à 23:05
je pense que TempVars est fonctionnellement identique aux variables globales (à part que TempVars peut être utilisé plus largement, aussi hors VBA, et tu fais probablement cela dans tes formulaires). je n'ai pas regardé tes formulaires, j'ai regardé uniquement ton code VBA.
si tu es à l'aise avec TempVars, je ne vois pas de raison de ne pas les utiliser.
TempVars n'existe pas avant Access 2007, sache-le si jamais tu veux utiliser ta base avec un Access plus ancien.
tu pourrais effectivement utiliser TempVars (ou une variable globale) pour l'ouverture de l'état que tu mentionnais au départ. il est préférable d'utiliser la même solution partout.
je pense que chaque ouverture de la base (chaque session) a ses copies privées de TempVars et des variables globales, donc l'un comme l'autre sont propres à chaque session/ordinateur des utilisateurs.
si tu es à l'aise avec TempVars, je ne vois pas de raison de ne pas les utiliser.
TempVars n'existe pas avant Access 2007, sache-le si jamais tu veux utiliser ta base avec un Access plus ancien.
tu pourrais effectivement utiliser TempVars (ou une variable globale) pour l'ouverture de l'état que tu mentionnais au départ. il est préférable d'utiliser la même solution partout.
je pense que chaque ouverture de la base (chaque session) a ses copies privées de TempVars et des variables globales, donc l'un comme l'autre sont propres à chaque session/ordinateur des utilisateurs.
Modifié le 7 avril 2020 à 09:09
7 avril 2020 à 09:19