Requete SQL

fguappi Messages postés 2 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 2 septembre 2006 - 1 sept. 2006 à 10:11
fguappi Messages postés 2 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 2 septembre 2006 - 2 sept. 2006 à 14:02
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
1 sept. 2006 à 10:17
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
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
2 sept. 2006 à 01:54
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)
0
fguappi Messages postés 2 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 2 septembre 2006
2 sept. 2006 à 14:02
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
0
Rejoignez-nous