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

VB.NET Discussion :

Petit Soucis avec le format Date


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut Petit Soucis avec le format Date
    Bonjour à vous

    Je comprend pas ce qui arrive avec le test de mon code, du coup je me dit que je problème est surement devant le clavier Je me tourne tout de même vers vous pour m'aider à ajuster mon code pour un meilleur résultat.

    Dans la routine de mon code je récupère une date, jusque la tout vas bien, en fait c'est une variable string que je convertie en date. Par fois la variable string contiens "N/A" donc je donne donc Nothing à ma Date.

    En mode break, ma variable de format date contiens 12:00:00AM.

    lorsque j'enregistre ma variable dans ma base Access de façon fortement typé, la cellule de ma BD marque 2001-01-01.

    des suggestions de corrections seraient très apprécié.

    voici mon code qui récupère ma date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Case "Ex-Div Date:"
                                    If Tmpstr.Contains("Ex-Div Date:") Then
                                        Int1 = Tmpstr.IndexOf("qmCompanyData")
                                        Int1 = Tmpstr.IndexOf("Ex-Div Date:", Int1)
                                        Int1 = Tmpstr.IndexOf("<td class=", Int1)
                                        Int1 = Tmpstr.IndexOf(">"c, Int1) + 1
                                        Int2 = Tmpstr.IndexOf("<"c, Int1)
                                        StrRep = Tmpstr.Substring(Int1, Int2 - Int1)
                                        StrRep = StrRep.Trim
                                        If IsDate(StrRep) Then
                                            Don.DateExDiv = CDate(StrRep)
                                            'Console.WriteLine(Don.DateExDiv)
                                        Else
                                            Don.DateExDiv = Nothing
                                            'Console.WriteLine(Don.DateExDiv)
                                        End If

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    j'oubliais le code lors de l'enregistrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Add(New OleDbParameter("@DateExDiv", OleDb.OleDbType.DBDate))
    dans le fond, comment je fais pour avoir une cellule vide dans ma bd si il n'y a pas de date ?

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    une variable date en vb.net quand elle n'est pas remplie vaut 1/1/1 12am
    c'est ca valeur d'initialisation, tout comme un integer vaut 0 par défaut

    certains types date en base vont de 1950 à 2050, et donc l'anné 1 est considérée comme 2001

    il faut donc changer ton type de date pour que ca soit un vrai type date, pas un smalldate


    après si tu veux pouvoir enregistrer le fait qu'il n'y a pas de date, il faut que ta colonne dans access accepte NULL, que ta variable dans .net soit de type date? (équivaut à nullable(of date))
    et pour mettre un null depuis une requete il faut que le parameter ait la valeur System.DbNull.Value

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Merci Pol j'ai fais les ajustements que tu m'as dit.

    j'ai modifier ma table de bd,

    j'ai modifier dans ma class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private _DatExDiv As Nullable(Of Date) = Nothing
    maintenant j'accroche au niveau des paramètres voici ce que j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add(New OleDbParameter("@DateExDiv", OleDb.OleDbType.DBDate))
    .Parameters("@DateExDiv").Value = System.DBNull.Value(CDate(SQlS(11)))

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    à la place de
    Private _DatExDiv As Nullable(Of Date) = Nothing
    on peut écrire
    Private _DatExDiv As Date?

    Visual studio prend en charge la syntaxe de rajouter un ? derrière un type par valeur pour gérer le fait qu'il est nullable, et c'est à la compilation qu'il compile un nullable(of )



    pour le parameter il faut le faire en 2 temps (ou avec un iif) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parameters.Addwithvalue("@date",system.dbnull.value)
    if madate.hasvalue then parameters("@date").value = madate.value
    system.dbnull.value c'est une valeur (null) ca ne demande pas de paramètre
    la classe nullable a 2 propriétés utiles : HasValue qui te dit si il y a quelque chose dedans ou si c'est nothing et Value qui te donne la valeur as le type de base (date en l'occurrence)

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Merci Pol j'avance je sens que j'y arrive

    voici ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .Parameters.AddWithValue("@DateExDiv", System.DBNull.Value)
                    If Not SQlS(11) = Nothing Then
                        .Parameters("@DateExDiv").Value = SQlS(11)
                    End If
    ma variable sqis(11) = ""
    et j'ai un message d'erreur
    Informations supplémentaires*: La mise à jour à échoué Le paramètre @DateExDiv n'a pas de valeur par défaut.

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    "n'a pas de valeur par défaut" veut surement dire que la colonne dans ta base exige une valeur, et tu veux mettre null donc il est pas content
    si tu veux autoriser les null il faut cocher la case qui va bien sur la colonne

    par contre le début du message me laisse perplexe
    de toute façon access ne peut que laisser perplexe tellement ce n'est pas pratique ...

    sinon c'est peut etre le type du paramètre qu'il faut fournir, ou alors le = nothing (qui est n'est pas conseillé sur certains types dont string)

    avec si peu d'infos je ne peux que faire des hypothèses, on pas le type de SQlS ni le type de la colonne etc...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    ok ma base access accepte les null j,ai revérifier

    Autorise la valeur null
    est à true

    bon je continu de chercher

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Hiiiiiiii Haaa!!

    Merci Pol voici le code à faire pour que ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Not SQlS(11) = Nothing Then
                        .Parameters("@DateExDiv").Value = SQlS(11)
                    Else
                        .Parameters("@DateExDiv").Value = DBNull.Value
     
                    End If

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Points : 293
    Points
    293
    Par défaut
    Donc dans le fond je devrais faire ça avec tout les cellules qui peuvent être vide genre string, double, int ?

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

Discussions similaires

  1. petit soucis avec la fonction date
    Par gaston11 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/02/2013, 22h42
  2. Petit souci avec dates
    Par santacrus dans le forum VBA Access
    Réponses: 9
    Dernier message: 11/10/2009, 08h06
  3. Un petit souci avec les dates
    Par Ben-o dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 27/09/2007, 18h42
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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