[VBA] GROS PROBLEME !! help plz
Résolu
Onishi
Messages postés
314
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- [VBA] GROS PROBLEME !! help plz
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
23 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Dans le code associé à un bouton, tu peux ouvrir un état, et ajuster comment cet état est créé, avec :
DoCmd.OpenReport
DoCmd.OpenReport
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
essaie plutot, au lieu de ta ligne en gras :
sqlfiltre = " ID_THEME ='" + V_ID_THEME +"') "
sqlfiltre = sqlfiltre + " and " ID_S_THEME ='" + V_ID_S_THEME +"') " 'ainsi de suite
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, ,
sqlfiltre = " ID_THEME ='" + V_ID_THEME +"') "
sqlfiltre = sqlfiltre + " and " ID_S_THEME ='" + V_ID_S_THEME +"') " 'ainsi de suite
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, ,
Là j'ai fais ça :
sqlfiltre = V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
mais quand je clique sur le bouton il me dis que mon ID_GEOBASE peut désigner plusieurs tables listées dans la clause FROM de mon instruction SQL, pourtant elle est comme ça :
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE (((T_COUCHE_GEO.ID_GEOBASE)=[T_GEOBASE].[ID_GEOBASE]) AND ((T_COUCHE_GEO.ID_THEME)=[T_THEMATIQUE].[ID_THEME]));
Il y a bien une table devant chaque ID_GEOBASE nan ?
sqlfiltre = V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
mais quand je clique sur le bouton il me dis que mon ID_GEOBASE peut désigner plusieurs tables listées dans la clause FROM de mon instruction SQL, pourtant elle est comme ça :
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE (((T_COUCHE_GEO.ID_GEOBASE)=[T_GEOBASE].[ID_GEOBASE]) AND ((T_COUCHE_GEO.ID_THEME)=[T_THEMATIQUE].[ID_THEME]));
Il y a bien une table devant chaque ID_GEOBASE nan ?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Quel contiens sqlfiltre exactement au moment du openreport ?
Il faut aussi mettre les noms des tables dans sqlfiltre...
Il faut aussi mettre les noms des tables dans sqlfiltre...
Snif je suis naze, j'ai jamais concaténer des variables est ce que c'est bien comme ça ?
sqlfiltre = '" ID_GEOBASE ='" + V_ID_GEOBASE_EMPL + "' & '" ID_THEME ='" + V_ID_THEME + "' & '" ID_S_THEME ='" + V_ID_S_THEME + "' & '" ID_S_THEME ='" + V_ID_SS_THEME + "' & '" ID_GEOBASE ='" + V_ID_GEROBASE_INS + "' & '" SERVICE_AGENT ='" + V_SERVICE_NOM + "' & '" ID_AGENT ='" + V_ID_AGENT + "'
sqlfiltre = '" ID_GEOBASE ='" + V_ID_GEOBASE_EMPL + "' & '" ID_THEME ='" + V_ID_THEME + "' & '" ID_S_THEME ='" + V_ID_S_THEME + "' & '" ID_S_THEME ='" + V_ID_SS_THEME + "' & '" ID_GEOBASE ='" + V_ID_GEROBASE_INS + "' & '" SERVICE_AGENT ='" + V_SERVICE_NOM + "' & '" ID_AGENT ='" + V_ID_AGENT + "'
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
essaie ainsi :
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
Ok merci donc apparemment cela ne bloque plus à partir du sql filtre mais il me dis que mon ID_GEOBASE peut être de différentes tables dans mon instruction SQL
et il me surligne cette ligne (en gras) :
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE T_COUCHE_GEO.ID_GEOBASE = T_GEOBASE.ID_GEOBASE
AND T_COUCHE_GEO.ID_THEME = T_THEMATIQUE.ID_THEME;
pourtant que je sache cette requête ci-dessus explique clairement d'où vient chaque ID_GEOBASE
et il me surligne cette ligne (en gras) :
sqlfiltre = " ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, T_THEMATIQUE.ID_THEME
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE T_COUCHE_GEO.ID_GEOBASE = T_GEOBASE.ID_GEOBASE
AND T_COUCHE_GEO.ID_THEME = T_THEMATIQUE.ID_THEME;
pourtant que je sache cette requête ci-dessus explique clairement d'où vient chaque ID_GEOBASE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Il faut aussi mettre les noms des tables dans sqlfiltre...
Si tu veux éviter cela, il faut dans ton query qui sert de base à ton état, éviter de sélectioner des champs synonymes.
Si tu veux éviter cela, il faut dans ton query qui sert de base à ton état, éviter de sélectioner des champs synonymes.
J'ai tester avec un MsgBox sqlfiltre et il me dit que sqlfiltre est null...
le code est comme ca sqlfiltre = " [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Désolé en plus je dois partir je reprendrais ça lundi. Je sais pas si tu seras toujours là mais j'essaierais de trouver tout seul sinon. Encore merci pour ton aide ça m'a été précieux ^^
le code est comme ca sqlfiltre = " [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Désolé en plus je dois partir je reprendrais ça lundi. Je sais pas si tu seras toujours là mais j'essaierais de trouver tout seul sinon. Encore merci pour ton aide ça m'a été précieux ^^
Il faudrait que TOUTES les variables V_ soient de type string.
La logique suppose aussi que TOUTES les variables interviennent dans le filtre.
Il y a moyen de faire mieux, du genre :
sqlfiltre= " 0 = 0 "
if V_ID_GEOBASE_EMPL <> "" then
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' "
end if
La logique suppose aussi que TOUTES les variables interviennent dans le filtre.
Il y a moyen de faire mieux, du genre :
sqlfiltre= " 0 = 0 "
if V_ID_GEOBASE_EMPL <> "" then
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' "
end if
Bonjour yg_be, bon, mon problème est que j'ai des listes qui ce sont rajoutées et deux d'entre elles posent problème.
La première, la liste LISTE_SS_THEME qui me pose un problème lors du clique du bouton afficher. En effet cette liste n'est pas forcément renseignée et donc lors de la compilation la liste retourne null.
La deuxième est une liste nommée LISTE_GEOBASE_INS, en fait elle a le même but que la liste LISTE_GEOBASE sauf que celle ci permet d'afficher des informations dans un sous état situé dans l'état....(je sais c'est vraiment compliqué comme méthode ...)
Et donc pour l'instan quand je récupère sa valeur cela m'affiche null aussi. Est ce que cela pourrait être du à la LISTE_GEOBASE qui bloqueré la LISTE_GEOBASE_INS ?
Cordialement, Onishi ^^
PS : Voici l'état de mon code pour le moment :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As String
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
End Sub
Private Sub BT_REINITIALISER_Click()
LISTE_GEOBASE_EMPL = ""
liste_theme = ""
liste_sous_theme = ""
liste_sous_sous_theme = ""
LISTE_GEOBASE_INS = ""
LISTE_SERVICE = ""
LISTE_NOM_AGENT = ""
End Sub
Private Sub LISTE_GEOBASE_1_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_theme.Requery
End Sub
Private Sub LISTE_SOUS_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub LISTE_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_theme.Requery
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub bt_retour_Click()
On Error GoTo Err_bt_retour_Click
DoCmd.Close
Exit_bt_retour_Click:
Exit Sub
Err_bt_retour_Click:
MsgBox Err.Description
Resume Exit_bt_retour_Click
End Sub
La première, la liste LISTE_SS_THEME qui me pose un problème lors du clique du bouton afficher. En effet cette liste n'est pas forcément renseignée et donc lors de la compilation la liste retourne null.
La deuxième est une liste nommée LISTE_GEOBASE_INS, en fait elle a le même but que la liste LISTE_GEOBASE sauf que celle ci permet d'afficher des informations dans un sous état situé dans l'état....(je sais c'est vraiment compliqué comme méthode ...)
Et donc pour l'instan quand je récupère sa valeur cela m'affiche null aussi. Est ce que cela pourrait être du à la LISTE_GEOBASE qui bloqueré la LISTE_GEOBASE_INS ?
Cordialement, Onishi ^^
PS : Voici l'état de mon code pour le moment :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As String
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
End Sub
Private Sub BT_REINITIALISER_Click()
LISTE_GEOBASE_EMPL = ""
liste_theme = ""
liste_sous_theme = ""
liste_sous_sous_theme = ""
LISTE_GEOBASE_INS = ""
LISTE_SERVICE = ""
LISTE_NOM_AGENT = ""
End Sub
Private Sub LISTE_GEOBASE_1_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_theme.Requery
End Sub
Private Sub LISTE_SOUS_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub LISTE_THEME_AfterUpdate()
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_theme.Requery
Forms![F_RECHERCHE_PAR_CRITERES]!liste_sous_sous_theme.Requery
End Sub
Private Sub bt_retour_Click()
On Error GoTo Err_bt_retour_Click
DoCmd.Close
Exit_bt_retour_Click:
Exit Sub
Err_bt_retour_Click:
MsgBox Err.Description
Resume Exit_bt_retour_Click
End Sub
Voici la requête source de l'état :
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, [T_THEMATIQUE].[ID_THEME]
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE [T_COUCHE_GEO].[ID_GEOBASE]=[T_GEOBASE].[ID_GEOBASE]
AND [T_COUCHE_GEO].[ID_THEME]=[T_THEMATIQUE].[ID_THEME];
et voici mon sql filtre :
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
SELECT T_COUCHE_GEO.*, T_GEOBASE.*, [T_THEMATIQUE].[ID_THEME]
FROM T_COUCHE_GEO, T_GEOBASE, T_THEMATIQUE
WHERE [T_COUCHE_GEO].[ID_GEOBASE]=[T_GEOBASE].[ID_GEOBASE]
AND [T_COUCHE_GEO].[ID_THEME]=[T_THEMATIQUE].[ID_THEME];
et voici mon sql filtre :
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Si c'est au moment de l'ouverture de l'état que tu as le message d'erreur "ID_GEOBASE peut appartenir à différentes tables", essaie un peu en n'utilisant pas sqlfiltre dans le openreport.
Pour l'instant cette erreur je ne l'ai plus ☺ mais en tout cas l'erreur d'incompatibilité commence à m'énerver, je ne trouve pas la variable dont le type bloque :s.
Voici le code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Integer
Dim V_ID_S_THEME As Integer
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As Integer
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "'"
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'sqlfiltre = " 0 = 0 "
'If Not IsNull(V_ID_GEOBASE_EMPL) Then
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
Voici le code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As String
Dim V_ID_THEME As Integer
Dim V_ID_S_THEME As Integer
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As String
Dim V_SERVICE_NOM As String
Dim V_ID_AGENT As Integer
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "'"
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'sqlfiltre = " 0 = 0 "
'If Not IsNull(V_ID_GEOBASE_EMPL) Then
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Le plus propre, c'est de faire ainsi :
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
if V_LOCAL_ATTRIB then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
else
sqlfiltre = sqlfiltre " and (not ATTRIB_LOCAL) "
end if
Avec cette logique, suivant que le checkbox est selectione ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux. Est-ce cela que tu veux obtenir ?
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
if V_LOCAL_ATTRIB then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
else
sqlfiltre = sqlfiltre " and (not ATTRIB_LOCAL) "
end if
Avec cette logique, suivant que le checkbox est selectione ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux. Est-ce cela que tu veux obtenir ?
J'ai mis toutes les variables sauf la checkbox en variant pour vérifier l'incompatibilité? Lors de l'exécution un message me dit :
Erreur d'exécution 3075 : Erreur de syntaxe (opérateur absent) dans l'expression '(and T_GEOBASE.ID_GEOBASE ='P' and T_COUCHE_GEO.ID_THEME ='6' and ID_S_THEME ='30' and ID_SS_THEME ="and T_GEOBASE.ID_GEOBASE =" and SERVICE_AGENT ='SEEF' and ID_AGENT ='65' and (not ATTRIB_LOCAL))'.
Je ne comprend pas tellement d'où cela peut venir :s
PS : Access me surligne cette ligne en jaune et le sql filtre à l'ai de contenir le contenu de message d'erreur :
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Erreur d'exécution 3075 : Erreur de syntaxe (opérateur absent) dans l'expression '(and T_GEOBASE.ID_GEOBASE ='P' and T_COUCHE_GEO.ID_THEME ='6' and ID_S_THEME ='30' and ID_SS_THEME ="and T_GEOBASE.ID_GEOBASE =" and SERVICE_AGENT ='SEEF' and ID_AGENT ='65' and (not ATTRIB_LOCAL))'.
Je ne comprend pas tellement d'où cela peut venir :s
PS : Access me surligne cette ligne en jaune et le sql filtre à l'ai de contenir le contenu de message d'erreur :
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
N'aurais-tu pas supprimé la ligne
sqlfiltre = " 0 = 0 "
avant sqlfiltre = sqlfiltre + ...
Je pense que tu tournes en rond, n'as tu pas négligé ma suggestion du lundi 23 juin 2008 à 10:28:47 ? Je pense qu'il vaut mieux éviter les variant et travailler sur les incompatibilités.
Une facon de voir rapidement les incompatibilités, c'est de decouper le "sqlfiltre =" en plusieurs lignes, en ajoutant progressivement des petits bouts à sqlfiltre.
Avec les variant, tu caches les incompatibilités, mais tu te crees d'autres problemes que tu n'as pas besoin de resoudre.
sqlfiltre = " 0 = 0 "
avant sqlfiltre = sqlfiltre + ...
Je pense que tu tournes en rond, n'as tu pas négligé ma suggestion du lundi 23 juin 2008 à 10:28:47 ? Je pense qu'il vaut mieux éviter les variant et travailler sur les incompatibilités.
Une facon de voir rapidement les incompatibilités, c'est de decouper le "sqlfiltre =" en plusieurs lignes, en ajoutant progressivement des petits bouts à sqlfiltre.
Avec les variant, tu caches les incompatibilités, mais tu te crees d'autres problemes que tu n'as pas besoin de resoudre.
C'est pas faux excuse moi. Je l'ai mis comme ça :
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Mais hélas l'erreur du ID_GEOBASE qui appartient a plusieurs tables est revenue.
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Mais hélas l'erreur du ID_GEOBASE qui appartient a plusieurs tables est revenue.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je pense que si tu as l'erreur du ID_GEOBASE qui appartient a plusieurs tables, c'est signe que tu progresses, ce n'est pas le moment de faire marche arrière !
Si c'est au moment de l'ouverture de l'état que tu as le message d'erreur "ID_GEOBASE peut appartenir à différentes tables", essaie un peu en n'utilisant pas sqlfiltre dans le openreport.
Si c'est au moment de l'ouverture de l'état que tu as le message d'erreur "ID_GEOBASE peut appartenir à différentes tables", essaie un peu en n'utilisant pas sqlfiltre dans le openreport.
Oui je sens aussi que je progresse (grâce à toi ^^).
Comme tu m'as dis j'ai enlevé sql filtre de la ligne qui permet d'ouvrir l'état mais à la place je met quoi ? ça :
" and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
Parce qu'avec ça l'erreur 3075 revient mais pas avec ID_GEOBASE, avec tout le détail comme tout à l'heure :
erreur de syntaxe dans l'expression '(and....etc (comme au dessus)).
Comme tu m'as dis j'ai enlevé sql filtre de la ligne qui permet d'ouvrir l'état mais à la place je met quoi ? ça :
" and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
Parce qu'avec ça l'erreur 3075 revient mais pas avec ID_GEOBASE, avec tout le détail comme tout à l'heure :
erreur de syntaxe dans l'expression '(and....etc (comme au dessus)).
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Tu fais simplement :
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
C'est pour voir si l'erreur vient du filtre ou pas.
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
C'est pour voir si l'erreur vient du filtre ou pas.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Et su tu ouvres l'état à la main ?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Cela vient de l'état, soit de la requete source, soit d'autre chose.
J'ai toujours une vague inquetude à propos de quelque chose que tu avais mentioné à propos d'un sous état... Cela te dit quelque chose, c'était dans ton mesage du lundi 23 juin 2008 à 09:30:22 ?
Tu peux y jeter un coup d'oeil ?
J'ai toujours une vague inquetude à propos de quelque chose que tu avais mentioné à propos d'un sous état... Cela te dit quelque chose, c'était dans ton mesage du lundi 23 juin 2008 à 09:30:22 ?
Tu peux y jeter un coup d'oeil ?
Va falloir que j'aille manger :s. Je re cette aprem. Pour ce qui des sous états il y en a 3. Un qui affiche les attributs, un qui affiche les mise à jour de la couches et les personnes qui les effectuent et le dernier qui affiche les responsable. A toute je serais la dans une petite heure.
Re bonjour, voilà les requêtes sources de mes différents sous états, pourrais tu me dire si je dois les supprimer ?
Sous état ATTRIBUT :
SELECT T_ATTRIBUT.*
FROM T_ATTRIBUT;
Sous état MAJ Historique
SELECT T_MAJ_HISTO.*, T_MAJ_RESP.ID_MAJ_RESP, T_MAJ_RESP.ID_AGENT, T_AGENT.AGENT_NOM
FROM T_MAJ_HISTO LEFT JOIN (T_AGENT RIGHT JOIN T_MAJ_RESP ON T_AGENT.ID_AGENT = T_MAJ_RESP.ID_AGENT) ON T_MAJ_HISTO.ID_MAJ_HISTO = T_MAJ_RESP.ID_MAJ_HISTO;
Sous état RESPONSABLE :
SELECT T_RESP.*, T_AGENT.*
FROM T_AGENT INNER JOIN T_RESP ON T_AGENT.ID_AGENT = T_RESP.ID_AGENT;
Sous état ATTRIBUT :
SELECT T_ATTRIBUT.*
FROM T_ATTRIBUT;
Sous état MAJ Historique
SELECT T_MAJ_HISTO.*, T_MAJ_RESP.ID_MAJ_RESP, T_MAJ_RESP.ID_AGENT, T_AGENT.AGENT_NOM
FROM T_MAJ_HISTO LEFT JOIN (T_AGENT RIGHT JOIN T_MAJ_RESP ON T_AGENT.ID_AGENT = T_MAJ_RESP.ID_AGENT) ON T_MAJ_HISTO.ID_MAJ_HISTO = T_MAJ_RESP.ID_MAJ_HISTO;
Sous état RESPONSABLE :
SELECT T_RESP.*, T_AGENT.*
FROM T_AGENT INNER JOIN T_RESP ON T_AGENT.ID_AGENT = T_RESP.ID_AGENT;
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Ces requetes source ont l'air ok.
Je pense que, quelque part dans l'état, il y a le champ "ID_GEOBASE", peut-être dans les propriétés d'un textbox ?
Je pense que, quelque part dans l'état, il y a le champ "ID_GEOBASE", peut-être dans les propriétés d'un textbox ?
Oui c'est ça je l'ai 4 fois au total ! Une fois dans l'état et une fois dans chaque sous état !! je vais essayer de préfixer chaque textbox.
EDIT : Bon je l'ai est toutes préfixées de la tables les concernant et il me dis toujours que id_geobase peut être listé dans plusieurs tables, pourquoi ? Faut il que je modifie la source de mes état ou du moins que j'y précise la table à laquelle appartient l'id geo ?
EDIT : Bon je l'ai est toutes préfixées de la tables les concernant et il me dis toujours que id_geobase peut être listé dans plusieurs tables, pourquoi ? Faut il que je modifie la source de mes état ou du moins que j'y précise la table à laquelle appartient l'id geo ?
Bon j'ai recrée la requête source de mon état et idem pour mes 3 sous états en préfixant chaque champs de chaque table (vive l'assistant ^^)
Le problème de id_geobase n'apparait plus mais lord du click sur le bouton un petite case apparait et me demande de saisir : ID_GEOBASE, ID_THEME, T_AGENT.ID_AGENT, et encore T_AGENT.ID_AGENT !!
Là je comprend pas tellement. Et quand j'ai rentré ces informations l'état s'affiche avec ce que je viens de marquer.
Pourquoi ce que j'ai écrit dans le code a l'air de ne pas fonctionner ??
Le problème de id_geobase n'apparait plus mais lord du click sur le bouton un petite case apparait et me demande de saisir : ID_GEOBASE, ID_THEME, T_AGENT.ID_AGENT, et encore T_AGENT.ID_AGENT !!
Là je comprend pas tellement. Et quand j'ai rentré ces informations l'état s'affiche avec ce que je viens de marquer.
Pourquoi ce que j'ai écrit dans le code a l'air de ne pas fonctionner ??
Si tu ouvres ton état à la main, que vois-tu ? En principe, tu dois voir les infos de tous tes enregistrements, puisqu'il n'y a pas de filtre.
Je veux être certain que l'état est de nouveau ok avant de travailler sur le code. De plus, comme tu as changé ou recréé l'état, il faut peut-être adapter les sous-états ou le code.
Je veux être certain que l'état est de nouveau ok avant de travailler sur le code. De plus, comme tu as changé ou recréé l'état, il faut peut-être adapter les sous-états ou le code.
J'ai tout remis comme avant donc quand je lance l'état à la main tous les enregistrements s'affichent et quand j'exécute mon code depuis le bouton il me dis le pb de id_geobase.
Voici mon code :
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and (not ID_SS_THEME) "
Else
sqlfiltre = sqlfiltre + " and ID_SS_THEME"
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Ce que je ne comprend pas c'est que tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.
Voici mon code :
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_SS_THEME = '" + V_ID_SS_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and (not ID_SS_THEME) "
Else
sqlfiltre = sqlfiltre + " and ID_SS_THEME"
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
Ce que je ne comprend pas c'est que tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.
Si dans le code tu fais simplement la ligne suivante, sans utiliser le filtre, que se passe-t-il ?
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
A propos de ce que tu ne comprends pas (tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.), à ce moment-là, s tu ouvrais l'état à la main, que se passait-il ? Comme tu as choisi de tout remettre comem avant, le saurons-nous jamais ?
Attention, ta gestion du null de la liste LISTE_SS_THEME est foireuse , il vaut mieux faire :
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
A propos de ce que tu ne comprends pas (tout à l'heure en préfixant j'ai réussi à ouvrir mon état mais mon code n'était pas pris en compte. Il me demander de rentrer des infos et il m'afficher pas très bien la couches géographique.), à ce moment-là, s tu ouvrais l'état à la main, que se passait-il ? Comme tu as choisi de tout remettre comem avant, le saurons-nous jamais ?
Attention, ta gestion du null de la liste LISTE_SS_THEME est foireuse , il vaut mieux faire :
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
Bonjour,
Pour répondre à tes questions voilà :
Pour l'exécution du code avec cette ligne DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
Tu veux dire que je ne dois rien mettre d'autre ? SI c'est le cas j'ai fait le test et il me met le pb de ID_GEOBASE donc à mon avis j'ai une text box qui ne doit pas être préfixée dans mon état ou dans un des sous état.
Pour ce que je ne comprenez pas : En fait quand j'ai exécuté le code à partir du bouton Access me demandé de rentrer un ID_GEOBASE, un ID_THEME et deux foix un T_AGENT.ID_AGENT. Et pour l'ouverture du code à la main il me demandé de renseigner T_AGENT.ID_AGENT (mais j'avais beau le renseigner cela me répété toujours d'écrire T_AGENT.ID_AGENT)
Vraiment bizarre :s
Pour gérer le null de la liste LISTE_SS_THEME je vais corriger avec ce que tu as mis.
Je te donne les détails bientôt.
EDIT : Bon j'ai fais le test et il me dis Erreur d'exécution 13 : Incompatibilité de type. Je pense que cela vient de ce qui est en gras car il me le met à vide dans le sql filtre mais avant dans la récupération des valeurs de liste il m'affiche bien l'id.
Voici mon Code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS(là il récupère bien l'id exple P pour production)
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS +(là il me le met vide !) "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "' "
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'MsgBox V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
Pour répondre à tes questions voilà :
Pour l'exécution du code avec cette ligne DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview
Tu veux dire que je ne dois rien mettre d'autre ? SI c'est le cas j'ai fait le test et il me met le pb de ID_GEOBASE donc à mon avis j'ai une text box qui ne doit pas être préfixée dans mon état ou dans un des sous état.
Pour ce que je ne comprenez pas : En fait quand j'ai exécuté le code à partir du bouton Access me demandé de rentrer un ID_GEOBASE, un ID_THEME et deux foix un T_AGENT.ID_AGENT. Et pour l'ouverture du code à la main il me demandé de renseigner T_AGENT.ID_AGENT (mais j'avais beau le renseigner cela me répété toujours d'écrire T_AGENT.ID_AGENT)
Vraiment bizarre :s
Pour gérer le null de la liste LISTE_SS_THEME je vais corriger avec ce que tu as mis.
Je te donne les détails bientôt.
EDIT : Bon j'ai fais le test et il me dis Erreur d'exécution 13 : Incompatibilité de type. Je pense que cela vient de ce qui est en gras car il me le met à vide dans le sql filtre mais avant dans la récupération des valeurs de liste il m'affiche bien l'id.
Voici mon Code :
Option Compare Database
Private Sub BT_AFFICHER_Click()
'Déclaration des variables
Dim V_ID_GEOBASE_EMPL As Variant
Dim V_ID_THEME As Variant
Dim V_ID_S_THEME As Variant
Dim V_ID_SS_THEME As Variant
Dim V_ID_GEOBASE_INS As Variant
Dim V_SERVICE_NOM As Variant
Dim V_ID_AGENT As Variant
Dim V_LOCAL_ATTRIB As Boolean
'Récupération des valeurs dans les variables
V_ID_GEOBASE_EMPL = F_GEOBASE_EMPL
V_ID_THEME = F_ID_THEME
V_ID_S_THEME = F_ID_S_THEME
V_ID_SS_THEME = F_ID_SS_THEME
V_ID_GEOBASE_INS = F_ID_GEOBASE_INS(là il récupère bien l'id exple P pour production)
V_SERVICE_NOM = LISTE_SERVICE
V_ID_AGENT = F_ID_AGENT
V_LOCAL_ATTRIB = cb_attribut
sqlfiltre = " 0 = 0 "
'Permet de gérer le null de la liste LISTE_SS_THEME
If Not IsNull(V_ID_SS_THEME) Then
sqlfiltre = sqlfiltre + " and ID_SS_THEME = '" + V_ID_SS_THEME + "' "
End If
'Permet que suivant si la checkbox est selectionée ou pas, le filtre selectionera les valeurs où ATTRIB_LOCAL est vrai ou faux
If V_LOCAL_ATTRIB Then
sqlfiltre = sqlfiltre + " and ATTRIB_LOCAL "
Else
sqlfiltre = sqlfiltre + " and (not ATTRIB_LOCAL) "
End If
'Filtre récupérant le contenu de chaque variable
sqlfiltre = sqlfiltre + " and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEOBASE_EMPL + "' and [T_COUCHE_GEO].[ID_THEME] = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "'and [T_GEOBASE].[ID_GEOBASE] = '" + V_ID_GEROBASE_INS +(là il me le met vide !) "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "' and ATTRIB_LOCAL ='" + V_LOCAL_ATTRIB + "' "
'Syntaxe permettant d'ouvrir l'état E_SPECIFIQUE et d'y afficher les couches géographiques concernées par les critères
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , sqlfiltre
'MsgBox V_ID_GEOBASE_EMPL & Chr(13) & V_ID_THEME & Chr(13) & V_ID_S_THEME & Chr(13) & V_ID_SS_THEME & Chr(13) & V_ID_GEOBASE_INS & Chr(13) & V_SERVICE_NOM & Chr(13) & V_ID_AGENT
'sqlfiltre = " T_GEOBASE.ID_GEOBASE = '" + V_ID_GEOBASE_EMPL + "' and T_COUCHE_GEO.ID_THEME = '" + V_ID_THEME + "' and ID_S_THEME = '" + V_ID_S_THEME + "' and ID_S_THEME = '" + V_ID_SS_THEME + "' and T_GEOBASE.ID_GEOBASE = '" + V_ID_GEROBASE_INS + "' and SERVICE_AGENT = '" + V_SERVICE_NOM + "' and ID_AGENT ='" + V_ID_AGENT + "'"
'If Not (IsNull(V_ID_SS_THEME) Or IsEmpty(V_ID_SS_THEME)) Then
End Sub
Il n'y a pas un R en trop dans V_ID_GEROBASE_INS ?
Suggestion : ajouter "option explicit" tout au debut du code, tu auras alors une erreur de syntaxe pour ce genre d'anomalie.
Si l'ouverture "à la main" de l'état fonctionne sans erreur, mais que l'ouverture par le code, sans filtre, donne une erreur, je suis surpris... Est-ce bien le même état ?
Suggestion : ajouter "option explicit" tout au debut du code, tu auras alors une erreur de syntaxe pour ce genre d'anomalie.
Si l'ouverture "à la main" de l'état fonctionne sans erreur, mais que l'ouverture par le code, sans filtre, donne une erreur, je suis surpris... Est-ce bien le même état ?
Effectivement il y avait un R en trop et maintenant cela récupère bien l'ID.
J'ai ajouté "option explicit" au tout début du code et lorsque je compile voici l'erreur qui apparait :
Erreur de compilation : Variable non définie et il me surligne ceci : "sqlfiltre =" de la ligne sqlfiltre = " 0 = 0 "
En plus j'ai du trop bidouiller mais mon état ne s'ouvre plus correctement à la main :s.
J'ai ajouté "option explicit" au tout début du code et lorsque je compile voici l'erreur qui apparait :
Erreur de compilation : Variable non définie et il me surligne ceci : "sqlfiltre =" de la ligne sqlfiltre = " 0 = 0 "
En plus j'ai du trop bidouiller mais mon état ne s'ouvre plus correctement à la main :s.
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, "est ce là que je dois mettre ma requête ????"
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , (ID_GEOBASE = " & P & ")
Ma requête est celle ci :
SELECT T_COUCHE_GEO.*
FROM T_COUCHE_GEO
WHERE ID_GEOBASE="P";
Quand je clique sur le bouton il m'affiche mon état mais tous les champs sont rempli par #Nom ?
Je ne sais pas quoi mettre dans la source de mon état :s Une requête ?
DoCmd.OpenReport "E_SPECIFIQUE", acViewPreview, , " ID_GEOBASE = " & P
et si tu fais la requete à la main, qu'obtiens-tu ?