IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Erreur incompatibilité de type : code SQL dans une fonction VBA [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Erreur incompatibilité de type : code SQL dans une fonction VBA
    Bonjour à tous.

    Pour info j'utilise acces 2003, mais je ne pense pas que ceci interfère.

    Etant assez nul en SQL, je crée une requète et j'utilise en principe le code SQL dans le corps de mon programme. J'ai dans une table (2016TELE) les champs suivants, parmi d'autres : an, mois et jour et je souhaite connaître la dernière date enregistrée.

    Pour ceci j'ai crée une requête en utilisant la fonction cdate pour extraire dans un seul champ (appelé date) le dernier jour enregistré.

    Cette requète fonctionne parfaitement bien dans l'UI. En voici la syntaxe :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Last(CDate([an] & "/" & [mois] & "/" & [jour])) AS [Date] FROM 2016TELE;

    J'intègre ce code dans mon programme comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim db As Database
        Dim qdefDernierJour As QueryDef
        Dim rs1 As Recordset
        Set db = CurrentDb
        Set qdefDernierJour = db.CreateQueryDef("")
        With qdefDernierJour
            .SQL = "SELECT Last(CDate([an]& " / " & [mois] & " / " & [jour])) AS [Date]FROM 2016TELE"
     
            Set rs1 = .OpenRecordset
            rs1.MoveFirst
     
        End With
    Et là, j'ai le message suivant : erreur d'éxécution 13, incompatibilité de type.

    Un test avec : .SQL = "SELECT * FROM 2016TELE" passe sans problème. Il me semble donc qu'il peut s'agir d'un problème d'interprétation avec la fonction Cdate() dans la partie .SQL.

    Sauriez vous comment écrire correctement ce query ?

    Par avance, merci.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Il semble qu'il y ait des espaces dans " / "
    les supprimer
    et la date est inversée, utiliser cdate(DateSerial(an,mois,jour))

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    D'accord avec Helas sur les espaces en trop au niveau de "/". Par contre il n'est pas nécessaire d’utiliser la fonction DateSerial puis qu'il y a déjà une concaténation de la date dans la syntaxe.
    J'ai relevé dans ta syntaxe deux manques d'espaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SQL = "SELECT Last(CDate([an] & "/" & [mois] & "/" & [jour])) AS [Date] FROM 2016TELE"
    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci pour votre aide.

    Malheureusement, ce n'est pas cela. Les espaces ont ajoutés par access lui-même. Lorsque je les enlève, il les remet

    Par acquis de conscience, j'ai aussi tenté le dateSerial, sans plus de résultat.

    Je me souviens d'avoir déjà rencontré ce type de problème. Il me semble que cela se résolvait par une multiplication des guillemets ou l'ajout d'une apostrophe. Ca pourrait d'ailleurs être en lien avec ce problème d'espace autoimplémenté.

    Mais j'ai essayé moult combinaisons sans y arriver.

    Si vous avez d'autres idées, je suis preneur.


    [Modif]

    Suite à votre remarque et au raisonnement auquel ça m'a conduit, j'ai fini par trouver la syntaxe qui va bien

    La voici pour ceux qui seraient confrontés au même problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SQL = "SELECT Last(CDate([an] & ""/"" & [mois] & ""/"" & [jour])) AS [Date]FROM 2016TELE"
    En fait, il faut bien doubler les guillements autour de chaque signe de fraction, ce qui élimine ainsi l'espace qu'access auto-crée.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tes données [An],[mois] et [jour] sont communs ?

    Sont elles formatés correctement, mois sur deux caractères par exemple.

    Mets avant l'erreur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "SELECT Last(CDate([an] & "/" & [mois] & "/" & [jour])) AS [Date] FROM 2016TELE"
    Et regardes si la date est vraiment formaté comme dans le champ, de plus utilisé [Date] est très mauvais, changer le nom de l'alliace.

    De plus les différents types de données sont elles compatibles Date pour Date, etc...

    Philippe

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci pour cette réponse. Dans le même temps j'ai modifié mon post précédent pour y donner la solution.

    de plus utilisé [Date] est très mauvais, changer le nom de l'alliace.
    J'adhère à ce propos à 100%, je l'avais déjà fait, mais dans la solution postée je l'ai laissé pour garder une continuité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete sql dans une fonction
    Par xess91 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2009, 19h29
  2. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37
  3. Plusieurs requêtes T-SQL dans une fonction
    Par ellix86 dans le forum Développement
    Réponses: 3
    Dernier message: 26/02/2009, 16h48
  4. Erreur %goto et proc sql dans une macro
    Par raf64flo dans le forum Macro
    Réponses: 15
    Dernier message: 17/04/2008, 22h40
  5. Mettre une requete SQL dans une fonction
    Par yenna dans le forum ASP
    Réponses: 3
    Dernier message: 21/06/2007, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo