Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2010, 15h37   #1
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 45
Points : 10
Points : 10
Par défaut Requete SQL dans du VBA pour une création dynamique de requetes

Bonjour à tous,
J'ai suivi le tutoriel de Christophe Warin et de Charles A, respectivement la Création et paramétrage dynamique de requêtes et Initiation - Débogage : requêtes écrites par VBA. Je les félicite au passage pour leur travail.

Cependant, ma requete en SQL est trop grande pour.... VBA
Je n'ai pas fait de fautes de SQL, j'ai vérifié également en utilisant debug.print.

Il apparait que lors du debug.print dans la fenetre execution le code s'affiche sur 2 lignes, et seule la premiere ligne est enregistrée dans le champ access de la source SQL, la deuxieme est... ignorée, bien que stockée en VBA correctement.

A noter que je veux faire rentrer mes lignes SQL dans le champ : "source" de mon formulaire (recordsource en VBA)

Par contre, si dans le champ access je rentre la meme formule à la main, il ne me pose pas de probleme, d'ou mon soupçon d'un probleme entre vba et access.

Une idée pour contourner le probleme?

Merci à tous
Damien
Diablange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h54   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Bonjour,

Citation:
Cependant, ma requete en SQL est trop grande pour.... VBA
Citation:
mon soupçon d'un probleme entre vba et access
Cherche autre chose.

Es-tu sûr que ton code ne contient pas un saut de ligne ou un caractère intempestif.
Jette un coup d'oeil ici, si c'est un problème de formatage du sql.

http://www.developpez.net/forums/d99...-formater-sql/
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 19h08   #3
Membre habitué
 
Homme jean maury
Inscription : mars 2009
Messages : 116
Détails du profil
Informations personnelles :
Nom : Homme jean maury
Âge : 42
Localisation : Pologne

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : mars 2009
Messages : 116
Points : 111
Points : 111
Bonjour.

Si je comprend bien, dans VBA, la requete sql est sur deux lignes avec, a la fin de la 1ere ligne, un espace et un "_".
Si la requete sql est correct, peut etre faire de la facon suivante :

Code :
1
2
3
4
5
6
7
 
dim Requete as string
 
requete ="select................from ........ where.....and........"
requete = requete & " and........ and........"
 
'Affectation ensuite de la valeur Requete a l'endroit ou se trouve actuellement le select.
J'ai eu ce probleme il y a quelques temps avec des requetes sql dans VBA qui faisaient entre 3 et 4 lignes.

Cdlt.
Jean
jj4822 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 06h00   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Bonjour jj4822,

Ce que tu signales n’est pas spécifique au sql.
Si tu veux, pour des raisons de lisibilité, écrire ton code sur plusieurs lignes, tu peux utiliser un espace et un "_".
Ou procéder par concaténations successives comme tu l’indiques.
Cela dépend des circonstances.

A contrario, pour écrire plusieurs instructions sur une même ligne :
http://access.developpez.com/faq/?pa...#PlrsLignEnUne
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 06h14   #5
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 605
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 605
Points : 30 942
Points : 30 942
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Que veux-tu dire par trop grande ?

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h13   #6
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 45
Points : 10
Points : 10
Bonjour à tous et merci de vous préoccuper de ce problème.
jj4822, meme si j'ai malgré tout essayé, Claude a raison, cela n'est pas spécifique au SQL et n'est utile que pour la lisibilité.
Claude, j'ai essayé ton outil, il est plutot pratique, merci, mais cela me donne le même résultat que celui que j'avais avant.

Ce que je propose, c'est de copier mon code SQL ici, je vous propose pour ceux qui veulent bien d'inserer via VBA ce code dans un recordsource d'un formulaire d'une de vos bases.
Vous constaterez que l'opération se passe correctement mais que le remplissage de la propriété recordsource s'arrete un peu avant la fin de la clause FROM, le reste est ignoré.
En passant par un debug.print, on constatera que tout ce qui est copié est exactement la meme chose que ce qui apparait sur la premiere ligne d'un debug.print

En esperant que quelqu'un arrive à insérer cette requete entierement dans mon formulaire, j'attends de vos nouvelles.
Merci
Damien

PS : la variable test n'a pas d'influence dans le résultat, j'ai essayé avec un critère fixe et non variable, j'aboutis au meme résultat

Code :
1
2
3
4
 
Form_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"
Diablange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h35   #7
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Bonjour,

pour tester valablement, peux-tu poster une BDD compatible Access2000 avec la définition des tables.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 11h00   #8
Membre habitué
 
Homme jean maury
Inscription : mars 2009
Messages : 116
Détails du profil
Informations personnelles :
Nom : Homme jean maury
Âge : 42
Localisation : Pologne

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : mars 2009
Messages : 116
Points : 111
Points : 111
Bonjour.

Je sais bien que ce que je signale n'est pas specifique a sql.

Tout simplement il y a quelques temps, dans un de mes programmes, j'ai constate qu'une requete sur plusieurs lignes avec un espace suivi d'un "_" en fin de ligne me posait probleme dans VBA alors que la requete en elle meme etait correcte.
En reprenant exactement la requete sql sans aucun changement, et en utilisant ce que je propose ici, j'ai resolu mon probleme, la requete entiere a ete executee et j'obtient le resultat attendu.
J'avoue que je n'ai alors pas ete chercher plus loin.

La solution que vous trouverez m'interessera.

Cdlt.
Jean.
jj4822 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 11h09   #9
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 45
Points : 10
Points : 10
Claude....
Je veux bien mais....je suis sur un groupe de travail sécurisé et ma base également.
Comment puis je l'exporter vers un autre groupe de travail sachant que je suis sur 2007.
Peut etre que ca marchera malgré tout,
J'essaye, vous la trouverez en fichier joint.
Merci de votre aide.
Fichiers attachés
Type de fichier : zip Base de données31.zip (30,3 Ko, 3 affichages)
Diablange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 11h38   #10
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Ok merci, j'ai pu lire

Chez moi, ça marche

Dans un formulaire, un bouton avec ce code :
Code :
1
2
3
4
5
6
7
Private Sub Commande0_Click()
Dim text As String
text = "blabla"
Forms!F_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"
End Sub
Voici le zoom de la source





Il y a donc autre chose qui cloche dans ton code.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 12h19   #11
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 45
Points : 10
Points : 10
Effectivement, je viens de faire une série de tests.
Et j'ai trouvé ce qui clochait !
Ton code fonctionne très bien, à partir du moment ou le formulaire est ouvert (forms! nom du formulaire).
Par contre, et uniquement à partir d'un formulaire externe (ou du ruban dans mon cas) et que le formulaire sur lequel on veut changer le recordsource est fermé ! cela ne marche plus !
Dans ce cas on est obligé d'utiliser form_ nom du formulaire... c'est peut etre une piste?
Cela veut il également dire que l'on est incapable d'enregistrer un nouveau recordsource en "dur"? puisqu'en rouvrant le formulaire la propriété recordsource a repris son état initial?

Merci à vous, cela permet déjà de me débloquer en ayant une solution alternative.
Diablange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 14h07   #12
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
le code suivant te permet de modifier la source en "dur" d'un formulaire autre que celui actif.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Commande0_Click()
Dim text As String
text = "blabla"
'S'assurer que Forms!F_FormDevis est ouvert
If Not CurrentProject.AllForms("F_FormDevis").IsLoaded Then
DoCmd.OpenForm "F_FormDevis", acDesign
End If
'Modifier sa source
Forms!F_FormDevis.RecordSource = "SELECT TblDevis.[Année Salesforce], TblDevRevItemAlt.[Numero de devis], TblDevis.[Trigramme commercial], NomCommercial.[Nom commercial], NomCommercial.[Prenom Commercial], TblDevis.[Client direct], TblDevis.[Offre interne ?], TblDevis.[Client interne], TblDevis.[Nom de Projet], TblDevis.[Due date], TblDevRevItemAlt.Revision, TblDevRevItemAlt.Item, TblDevRevItemAlt.Alternative, TblDevRevItemAlt.FCE " & _
                                "FROM TblRevisions RIGHT JOIN (TblItems RIGHT JOIN ((NomCommercial INNER JOIN (ClientsInternes RIGHT JOIN TblDevis ON ClientsInternes.[Clients Internes] = TblDevis.[Client interne]) ON NomCommercial.[Trigramme commercial] = TblDevis.[Trigramme commercial]) INNER JOIN (TblCalculsElec RIGHT JOIN (TblAlternatives RIGHT JOIN TblDevRevItemAlt ON TblAlternatives.[Nom de l'alternative] = TblDevRevItemAlt.Alternative) ON TblCalculsElec.FCE = TblDevRevItemAlt.FCE) ON TblDevis.[Numéro de devis] = TblDevRevItemAlt.[Numero de devis]) ON TblItems.[Nom de l'item] = TblDevRevItemAlt.Item) ON TblRevisions.Revision = TblDevRevItemAlt.Revision " & _
                                "WHERE (((TblDevRevItemAlt.[Numero de devis])=" & Chr(34) & text & Chr(34) & "));"
' le refermer en sauvant
DoCmd.Close acForm, "Forms!F_FormDevis", acSaveYes
'vérifier sa source
DoCmd.OpenForm "F_FormDevis"
Debug.Print Forms!F_FormDevis.RecordSource
End Sub

Par contre, je ne suis pas parvenu à modifier, de manière permanente, la source du formulaire actif.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 17h27   #13
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 45
Points : 10
Points : 10
Intéressant ce comportement.... et curieux que l'on ne puisse pas le faire à partir de ce formulaire.
Merci en tout cas pour ces solutions, le post est résolu !
Damien
Diablange est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 17h31   #14
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Citation:
et curieux que l'on ne puisse pas le faire à partir de ce formulaire
Je ne sais comment le faire ! Ca doit être possible.
Je te suggère de poster la question.
"Peut-on modifier, de manière permanente la source du formulaire actif"
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h55.


 
 
 
 
Partenaires

Hébergement Web