Requete SQL

Signaler
Messages postés
2
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
2 septembre 2006
-
Messages postés
2
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
2 septembre 2006
-
Bonjour,
Je travaille actuellement sur un projet et j'ai un souci avec une requete SQL qui fonctionne sous sa forme originale mais que je n'arrive pas à remanier syntaxiquement sous VB 6.

Voici la requête sous sa forme originale :
SELECT PERMIS.IDPERMIS, TYPE_AUTORISATION.CODETYPE, PERMIS.NUMPERMIS, PROVENANCE.CODEPROVENANCE, PERMIS.DATEDEPOT, PERMIS.CODEPOSTAL, [NOM_VOIE]![NOMVOIE] & ", " & [NATURE_VOIE]![LIBVOIE] & IIf(IsNull([PREFIXE_VOIE]![Prefixe]),""," " & [PREFIXE_VOIE]![Prefixe]) AS myAdresseFROM (NOM_VOIE RIGHT JOIN (PREFIXE_VOIE RIGHT JOIN (NATURE_VOIE RIGHT JOIN T_VOIE ON NATURE_VOIE.IDNATUREVOIE T_VOIE.IdNatureVoie) ON PREFIXE_VOIE.IdPrefixe T_VOIE.IdPrefixeVoie) ON NOM_VOIE.IDNom_Voie = T_VOIE.IdNomVoie) RIGHT JOIN (PROVENANCE RIGHT JOIN (TYPE_AUTORISATION RIGHT JOIN (PERMIS LEFT JOIN (ADRESSE RIGHT JOIN AFFECTE ON ADRESSE.IDADRESSE = AFFECTE.IDADRESSE) ON PERMIS.IDPERMIS = AFFECTE.IDPERMIS) ON TYPE_AUTORISATION.IDTYPE = PERMIS.IDTYPE) ON PROVENANCE.IDPROVENANCE = PERMIS.IDPROVENANCE) ON T_VOIE.IdTvoie = ADRESSE.IDVOIE;

Sous VB cela donne :
    tsql = "SELECT PERMIS.IDPERMIS, TYPE_AUTORISATION.CODETYPE, PERMIS.NUMPERMIS,"
    tsql = tsql + " PROVENANCE.CODEPROVENANCE, PERMIS.DATEDEPOT, PERMIS.CODEPOSTAL,"
    tsql = tsql + " [NOM_VOIE]![NOMVOIE] & " + "'', ''" + " & [NATURE_VOIE]![LIBVOIE] & "
    tsql = tsql + "IIf(IsNull([PREFIXE_VOIE]![Prefixe])," + "''" + "''" + "," + "'' ''" + " & [PREFIXE_VOIE]![Prefixe]) AS myAdresse"
    tsql = tsql + " FROM (NOM_VOIE RIGHT JOIN (PREFIXE_VOIE RIGHT JOIN (NATURE_VOIE"    tsql tsql + " RIGHT JOIN T_VOIE ON NATURE_VOIE.IDNATUREVOIE T_VOIE.IdNatureVoie)"    tsql tsql + " ON PREFIXE_VOIE.IdPrefixe T_VOIE.IdPrefixeVoie) ON NOM_VOIE.IDNom_Voie = T_VOIE.IdNomVoie)"
    tsql = tsql + " RIGHT JOIN (PROVENANCE RIGHT JOIN (TYPE_AUTORISATION"
    tsql = tsql + " RIGHT JOIN (PERMIS LEFT JOIN (ADRESSE RIGHT JOIN AFFECTE"    tsql tsql + " ON ADRESSE.IDADRESSE AFFECTE.IDADRESSE) ON PERMIS.IDPERMIS = AFFECTE.IDPERMIS)"    tsql tsql + " ON TYPE_AUTORISATION.IDTYPE PERMIS.IDTYPE) ON PROVENANCE.IDPROVENANCE = PERMIS.IDPROVENANCE)"    tsql tsql + " ON T_VOIE.IdTvoie ADRESSE.IDVOIE;"

A l'execution de la requete tsql, j'ai constament l'erreur suivante
Erreur de syntaxe (opérateur absent) dans l'expression ''' & [NATURE_VOIE]![LIBVOIE] & IIf(IsNull([PREFIXE_VOIE]![Prefixe]),'''','' '' & [PREFIXE_VOIE]![Prefixe])'.

Je suis dessus depuis plus de 2 heures et j'accepterais bien un peu d'aide
Merci d'avance

3 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Cela donnerai plutôt un truc du genre :

tsql = "SELECT PERMIS.IDPERMIS, TYPE_AUTORISATION.CODETYPE, PERMIS.NUMPERMIS,
PROVENANCE.CODEPROVENANCE, PERMIS.DATEDEPOT, PERMIS.CODEPOSTAL,
[NOM_VOIE]![NOMVOIE] & "", "" & [NATURE_VOIE]![LIBVOIE] &
IIf(IsNull([PREFIXE_VOIE]![Prefixe]),"""","" "" &
[PREFIXE_VOIE]![Prefixe]) AS myAdresse
FROM (NOM_VOIE RIGHT JOIN
(PREFIXE_VOIE RIGHT JOIN (NATURE_VOIE RIGHT JOIN T_VOIE ON
NATURE_VOIE.IDNATUREVOIE = T_VOIE.IdNatureVoie) ON
PREFIXE_VOIE.IdPrefixe T_VOIE.IdPrefixeVoie) ON NOM_VOIE.IDNom_Voie
T_VOIE.IdNomVoie) RIGHT JOIN (PROVENANCE RIGHT JOIN (TYPE_AUTORISATION
RIGHT JOIN (PERMIS LEFT JOIN (ADRESSE RIGHT JOIN AFFECTE ON
ADRESSE.IDADRESSE AFFECTE.IDADRESSE) ON PERMIS.IDPERMIS
AFFECTE.IDPERMIS) ON TYPE_AUTORISATION.IDTYPE = PERMIS.IDTYPE) ON
PROVENANCE.IDPROVENANCE PERMIS.IDPROVENANCE) ON T_VOIE.IdTvoie
ADRESSE.IDVOIE"

Il te suffit de double les doubles quote de ta requête afin que vb n'en mettre qu'un seul
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Bizarre ta syntaxe avec des doubles ' devant et derrière tes virgules"
Bizarre les & en plein milieu de la syntaxe SQL
Remplace les " destinés à SQL par des '.
Garde les " pour délimiter les chaines VB.
Exemple :
tsql = "Select monChamp From maTable Where monChamp Like '%" & monTextBox.Text & "%'"
(en vert le VB, en bleu le SQL)

Rappel : Sous VB, la concaténation de chaine se fait avec & (et pas +) : Le + marche ... jusqu'au jour où ça marchera pas.
Rappel : TOUS les noms de tables ou champs (...) comportant des caractères spéciaux (accents, espace, souligné, ...) doivent être mis entre crochets [ et ]
Ce qui devrait être le cas (entre autre) de [TYPE_AUTORISATION]
En SQL, le caractère _ remplace une lettre/chiffre (le ? du DOS)
Le % remplace tous les caractères qui suivent ou précèdent (le * du DOS)
Messages postés
2
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
2 septembre 2006

J'utilisais l'apostrophe doublé pour ne pas faire de confusion dans la requête avec les guillemets.


Ta méthode est effectivement plus claire.
Merci