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 :

Valeur Null dans un Insert into


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut Valeur Null dans un Insert into
    Bonjour,

    Lorsque j’exécute le insert into et si la date n’est pas renseigné dans txtDateC j’ai une erreur "Incompatibilité de type" sur cette ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = IIf(IsNull(DateUS(txtDateC.Value)), "", DateUS(txtDateC.Value))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lstr_DateC = IIf(IsNull(DateUS(txtDateC.Value)), "", DateUS(txtDateC.Value))
     
    StrSql = "INSERT INTO [tbl Chèques] (RéfAdhérent, Emetteur, Banque, Montant, N°Chèque, DateC, ObservationsC)" & _
                  "values('" & lstr_RéfAdhérent & "'," & Chr(34) & Nz(lstr_Emetteur) & Chr(34) & "," & Nz(lstr_Banque) & ",'" _
                  & Nz(lstr_Montant) & "'," & Chr(34) & Nz(lstr_N°Chèque) & Chr(34) & "," & Nz(lstr_DateC) & "," _
                  & Chr(34) & Nz(lstr_ObservationsC) & Chr(34) & ");"
     
         DoCmd.RunSQL (StrSql)
    Comment exécuter le Insert Into si txtDatec n'est pas renseigné ?

    Merci pour votre aide.

    Salutations

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Par défaut
    Hello,

    Le problème est que si ta date est nulle, alors dans la requête SQL, il y a 2 virgule "," qui se suivent ce qui ne veut plus rien dire...

    donc tu pourrais faire quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = IIf(IsNull(DateUS(txtDateC.Value)), "", DateUS(txtDateC.Value))
    Ajouter cette ligne dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     lstr_DateC = lstr_DateC & ","
    Et dans ton code SQL supprimer le Nz() et la "," après lstrDateC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    StrSql = "INSERT INTO [tbl Chèques] (RéfAdhérent, Emetteur, Banque, Montant, N°Chèque, DateC, ObservationsC)" & _
                  "values('" & lstr_RéfAdhérent & "'," & Chr(34) & Nz(lstr_Emetteur) & Chr(34) & "," & Nz(lstr_Banque) & ",'" _
                  & Nz(lstr_Montant) & "'," & Chr(34) & Nz(lstr_N°Chèque) & Chr(34) & "," & Nz(lstr_DateC) & "," _
                  & Chr(34) & Nz(lstr_ObservationsC) & Chr(34) & ");"
     
         DoCmd.RunSQL (StrSql)
    Voilà en espérant t'avoir aider un peu

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonsoir subnox,

    Merci pour ta réponse, mais en faisant de cette manière j'ai une erreur de synthase.

    Salutations

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Je ne comprend pas pourquoi tu utilises la fonction NZ dans ton SQL et pas là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = IIf(IsNull(DateUS(txtDateC.Value)), "", DateUS(txtDateC.Value))
    J'aurais fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = NZ(DateUS(txtDateC.Value), "")
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Peux-tu ne rien mettre dans le champ date de ta table, si le vide n'est pas autorisé, c'est peine perdue.
    Essaie de mettre une date bidon en Nz pour voir, par exemple 1-1-1900
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    Bonsoir,

    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = NZ(DateUS(txtDateC.Value), "NULL")

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonjour,

    J'ai l'erreur "Incompatibilité de type" en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = NZ(DateUS(txtDateC.Value), "")
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = NZ(DateUS(txtDateC.Value), "NULL")
    J'ai crée un enregistrement dans la table sans mettre de valeur au champ date et cela à marché.

    Salutations

  8. #8
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    J'ai l'impression que la fonction DateUS ne renvoie pas la valeur Null.

    en suivant la suggestion de Mout1234, essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = IIf(IsNull(txtDateC.Value), "Null", DateUS(txtDateC.Value))
    Si la zone de texte est vide IIF renvoie "Null", sinon IIF renvoie le résultat de la fonction DateUS

    A+

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonjour LedZeepII,

    Suite à tes explications sur l'autre Post sur une ligne de code similaire, j'ai essayé en mettant le "Null" mais ça ne passe pas.

    Par contre je pense comme tu le dis que c'est la fonction ci-jointe que j'utilise qui ne renvoie pas la valeur Null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function DateUS(ByVal DateFR As Date) As String
    DateUS = "#" & Month(DateFR) & "/" & Day(DateFR) & "/" & Year(DateFR) & "#"
    End Function
    Mais comment faire ?

    Salutations

  10. #10
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Si ma ligne de code ne fonctionne pas, c'est que txtDateC.Value n'est ni Null ni une date.

    On peut changer DateUS comme ceci :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function DateUS(ByVal DateFR As Variant) As String
    If IsDate(DateFR) Then
       DateUS = "#" & Month(DateFR) & "/" & Day(DateFR) & "/" & Year(DateFR) & "#"
    Else
       DateUS = "Null"
    End If
    End Function
    et la ligne qui pose problème devient simplement
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    lstr_DateC = DateUS(txtDateC.Value)
    A+

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonsoir LedZeepII,

    Avec retard je te remercie pour ton aide.

    Pour que ma ligne passe j'ai du faire ce code, et j'aimerais savoir ce que tu en pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(lstr_DateC) Then
              lstr_DateC = 0
          Else
            lstr_DateC = "'" & txtDateC.Value & "'"
          End If
    Salutations.

  12. #12
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir jmde,

    je pense que ma proposition du 15/09/2007 avec la fonction dateUS modifiée est plus "propre" car elle respecte la syntaxe SQL Access en ce qui concerne les dates.

    0 est valeur numérique littérale, convertie en "0" car lstr_DateC est de type String.
    Dans la requête on va donc insérer 0 dans un champ Date.
    Tu auras au final 30/12/1899 00:00:00 comme date dans ton champ.
    Moi, je prefère Null.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       lstr_DateC = "'" & txtDateC.Value & "'"
    Les simples guillemets font qu'on va insérer une chaîne de caractère dans un champ Date.
    Le moteur de base de données va essayer de le convertir en date.
    Ca peut marcher, mais ce n'est pas sur à 100%

    Tout ça pour dire que je préfère de loin quand c'est mon code qui fait effectue de manière explicite des conversions de type ou de format, plutôt que de laisser faire Access ou Jet avec des règles que je ne maitrise pas.

    A+

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 660
    Par défaut
    Bonjour LedZeepII,

    Je suis d'accord pour dire que la fonction DateUS est plus propre, mais dans mon cas je n'arrive pas à faire passer ma ligne.

    Mais bon j'ai tellement de souci avec une fonction DLookup, que je verrais plus tard pourquoi ma ligne ne passe pas.

    Bonne journée.

    Salutations

Discussions similaires

  1. [Elementum] Insertion de valeurs nulles dans une colonne numérique d'un table
    Par cquilgars dans le forum Autres outils décisionnels
    Réponses: 2
    Dernier message: 17/07/2012, 11h50
  2. Insertion d'une valeur null dans une clé étrangère
    Par labib23dz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/03/2012, 10h24
  3. Insertion d'une valeur NULL dans un champs DATETIME
    Par jockhip12 dans le forum Requêtes
    Réponses: 5
    Dernier message: 17/02/2012, 12h58
  4. Réponses: 1
    Dernier message: 03/05/2011, 12h40
  5. Insertion valeur non de valeur NULL dans 'INSERT INTO'
    Par jacopasto dans le forum Développement
    Réponses: 4
    Dernier message: 25/11/2008, 23h09

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