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 :

Sauvegarder une "Structure" comportant divers types de variables


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Retraité (Travailleur autonome)
    Inscrit en
    Octobre 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité (Travailleur autonome)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 82
    Billets dans le blog
    1
    Par défaut Sauvegarder une "Structure" comportant divers types de variables
    Bonjour à tous,

    J'ai une "Structure" composée de plusieurs Champs que je désire enregistrer dans un fichier sur disque. Tout fonctionne bien jusqu'au moment de sauver.
    Les données à sauver sont dans un DataGridView (DGV1)

    Voici le code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
        Structure StructureType
            Public Contrôle As String
            Public No_Dossier As UInteger
            Public No_Table As UInteger
            Public No_Champ As Byte
            <VBFixedString(20)> Public NomChamp As String
            Public TypeDeVariable As Byte
            Public NbreCar As Byte
            Public Position As UShort
            <VBFixedString(15)> Public Format As String
            Public Table As UInteger
            <VBFixedArray(3)> Public Champ() As Byte
            <VBFixedString(15)> Public NomContrôle As String
            <VBFixedString(15)> Public Énum As String
            Public Obligatoire As Boolean
            Public Crypté As Boolean
            Public NoOrdreChampID As Byte
            Public Consultation As UInteger
            Public Modification As UInteger
        End Structure
     
        Public Ossature As StructureType   
     
        Private Sub InitStructure()
            Dim Fichier As String = ""
            Dim i As Integer
            Dim No_Fichier As Integer = 1
     
            Fichier = Trim(CheminClient) & "\" & "T001.dat"
            FileOpen(No_Fichier, Fichier, OpenMode.Binary)
     
            For i = 1 To 20
                'Sauvegarde de l'ossature de chacun des champs du fichier
                Ossature.NomChamp = Space(20)
                Ossature.Format = Space(15)
                Ossature.NomContrôle = Space(15)
                Ossature.Énum = Space(15)
     
                Ossature.Contrôle = "*"
                Ossature.No_Dossier = i
                Ossature.No_Table = 1
                Ossature.No_Champ = DGV1.Item(3, i).Value
                Ossature.NomChamp = DGV1.Item(4, i).Value
                Ossature.TypeDeVariable = DGV1.Item(5, i).Value
                Ossature.NbreCar = DGV1.Item(6, i).Value
                Ossature.Position = DGV1.Item(7, i).Value
                Ossature.Format = DGV1.Item(8, i).Value
                Ossature.Table = DGV1.Item(9, i).Value
                ReDim Ossature.Champ(3)
                Ossature.Champ(1) = DGV1.Item(10, i).Value
                Ossature.Champ(2) = DGV1.Item(11, i).Value
                Ossature.Champ(3) = DGV1.Item(12, i).Value
                Ossature.NomContrôle = DGV1.Item(13, i).Value
                Ossature.Énum = DGV1.Item(14, i).Value
                Ossature.Obligatoire = DGV1.Item(15, i).Value
                Ossature.Crypté = DGV1.Item(16, i).Value
                Ossature.NoOrdreChampID = DGV1.Item(17, i).Value
                Ossature.Consultation = DGV1.Item(18, i).Value
                Ossature.Modification = DGV1.Item(19, i).Value
     
                FilePut(No_Fichier, Ossature)    'C'est cette ligne qui bogue
            Next i
        End Sub
    Le message d'erreur est le suivant:
    L'E/S de fichier d'une structure avec un champ 'No_Dossier' de type 'UInt32' n'est pas valide.

    Merci d'avance pour vos conseils.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    En Fait Uint32 et Uinteger sont équivalents. Et apparemment, tu ne pourrais pas utiliser Uinteger dans ta structure. Mais, peut-être que Integer pourrait faire. (mais là tu vas probablement devoir ajouter des garde-fous dans ton code pour empêcher les numéros négatifs

    Mais avec une datatable au lieu d'une structure, tu peux sauvegarder la table en format xml avec au maximum 2 lignes de code. Et c'est pareil pour la récupérer du fichier.

    Ou bien tu peux créer ta propre classe et la sérialiser pour enregistrer le contenu et la déséréaliser pour le récupérer.

    P.S. C'est un des nombreux avantages de VB.net par rapport à VB6/VBA.
    P.P.S. TU n'es pas obligé de de limiter à Microsoft.VisualBASIC . Tu peux utiliser tous les classes de Framework, incluant System.IO et toutes ses possibilités d'écrire et de relire des fichiers.

    Et si jamais tu ne l'a pas vu. Tu peux même le télécharger en PDF

  3. #3
    Membre confirmé

    Profil pro
    Retraité (Travailleur autonome)
    Inscrit en
    Octobre 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité (Travailleur autonome)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 82
    Billets dans le blog
    1
    Par défaut
    Merci,

    J'ai résolu le problème. Il ne fallait tout simplement ne pas utiliser les types "Unsigned".

    Par contre, je rencontre une autre difficulté. J'en fait l'objet d'une autre discussion.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/06/2013, 09h34

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