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 21/08/2011, 21h11   #1
Invité de passage
 
Homme
Consultant ERP
Inscription : août 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant ERP

Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
Par défaut Syntaxe SQL à l'ouverture d'un Recordset ?

Bonjour,

J'ai un problème se syntaxe à l'ouverture d'un recordset. J'ai déjà essayé "pratiquement" toutes les syntaxes, mais je n'arrive pas à trouver ce qui ne va pas.

Description du problème :

Lorsqu'on clique sur un bouton situé dans un formulaire ( nom du formulaire =PRINT NORMAL), il faudrait lancer l'impression d'une série de documents liés à des records (clé de chaque record =NUMREC) stockés dans une table (Nom de la table = MOVES). Les numéros des records sont encodés manuellement par l'utilisateur dans 2 champs textes situés dans le formulaire (TEXT1 et TEXT3).

Voici le code utilisé pour l'instant :

Code :
1
2
3
4
5
6
7
8
Private Sub BT_PRT_DOCS_Click()
Dim db As DAO.Database
Set db = CurrentDb
 
Dim rst As DAO.Recordset
Dim strsql as string
Set strsql="SELECT * FROM MOVES WHERE MOVES!NUMREC BETWEEN FORMS!PRINT NORMAL!TEXT1 AND FORMS!PRINT NORMAL!TEXT3" 
Set rst = db.OpenRecordset(strsql)
Le reste de la procédure pour imprimer les documents liés (Via ShellExecute) fonctionne sans problème si on remplace
Code :
FORMS!PRINT NORMAL!TEXT1
et
Code :
FORMS!PRINT NORMAL!TEXT3
par des valeurs numériques fixes dans strsql.
(Exemple : between 31 and 56 qui sont des numéros de records dans la table MOVES).

Si vous pouviez m'aider, ça me rendrait évidemment grand service pour l'application sur laquelle je suis actuellement en train de travailler.

Merci beaucoup.
Alain Man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 21h25   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 622
Points : 11 622
Bonjour,
Il ne faut pas utiliser Set lorsque tu affectes une valeur à une variable de type primaire comme tu le fais avec ta variable strsql.

Ensuite ta chaine SQL n'est pas valide car tu utilises des espaces dans les noms de formulaire. Une erreur fréquente quand on débute.

Code :
FORMS!PRINT NORMAL!TEXT3
s'écrit

Code :
FORMS![PRINT NORMAL]!TEXT3
Tu devrais t'interesser au tuto sur le debogage des requetes sous VBA.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h09   #3
Invité de passage
 
Homme
Consultant ERP
Inscription : août 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant ERP

Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
Par défaut Merci pour les infos

Grand merci pour les infos !! Je ne peux malheureusement pas tester la syntaxe proposée car je n'ai pas le reste du code et de la version en développement à disposition pour l'instant (en vacances). Je teste la semaine prochaine et je réponds.

Encore merci et à bientôt.
Alain Man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 12h47   #4
Invité de passage
 
Homme
Consultant ERP
Inscription : août 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant ERP

Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
Par défaut Test de la proposition de syntaxe SQL

Bonjour Loufab,

Désolés pour la réaction tardive, mais je n'avais pas la possibilité de me replonger dans ce "problème" pour l'instant.
J'ai bien essayé la syntaxe proposée en tenant compte des crochets pour le nom du formulaire contenant un espace :
Code :
strsql = "SELECT * FROM MOVES WHERE MOVES!NUMREC BETWEEN FORMS![PRINT NORMAL]!TEXT1 AND FORMS![PRINT NORMAL]!TEXT3"
Mais maintenant, j'obtiens le message suivant :

"Trop peu de paramètres. 2 attendus" et le débogeur se positionne sur la ligne :

Code :
Set rst = db.OpenRecordset(strsql)
Quelle est l'explication de ce message.

Merci beaucoup et à bientôt.
Alain Man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h10   #5
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
Bonjour,

A essayer :

Code :
strsql = "SELECT * FROM MOVES WHERE NUMREC BETWEEN '" & FORMS![PRINT NORMAL]!TEXT1 & "' AND '" & FORMS![PRINT NORMAL]!TEXT3 & "'"
__________________
[Access] Les bases du débogage => ici
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 16h28   #6
Invité de passage
 
Homme
Consultant ERP
Inscription : août 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant ERP

Informations forums :
Inscription : août 2011
Messages : 4
Points : 0
Points : 0
Par défaut Ca ne fonctionne toujours pas !

Bonjour,

Merci beaucoup. Je venais justement d'essayer cette syntaxe, mais j'ai maintenant le message suivant : "Type de données incompatible dans l'expression du critère".

J'ai vérifié et le type de données de la table correspond au type de données des champs Text1 et Text3 du formulaire de saisie.

Je ne vois vraiment pas ??
Alain Man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 16h39   #7
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Bonjour,

Cette survient lorsque tu veux comparer un champs définit en numérique par du texte.

NUMREC est de quel type dans la table ?

sinon il faut le convertir. Expemple : CLng(FORMS![PRINT NORMAL]!TEXT3) ce qui donnerait

Code :
strsql = "SELECT * FROM MOVES WHERE NUMREC BETWEEN '" & FORMS![PRINT NORMAL]!TEXT1 & "' AND " & CLng(FORMS![PRINT NORMAL]!TEXT3) & ";"
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 19h52   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
mon coeur balance entre type texte et numérique , il faudrait tester avec un type numérique pour chaque valeur du between.

philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h32.


 
 
 
 
Partenaires

Hébergement Web