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 :

Problème avec la méthode Fill du DataAdapter


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Problème avec la méthode Fill du DataAdapter
    Bonjour j'ai un problème avec la méthode fill de l'objet dataadapter lors du chargement d'un champ memo, en fait j'essaie de charger 3 champs l'un d'eux est de type memo qui contient enormément de caractères, j'ai le message suivant comme erreur :
    "L'erreur suivante s'est produite : Le champ est trop petit pour accepter la quantité de données que vous voulez ajouter. Essayez d'insérer ou de coller moins de données."

    je crée un datatable (je le rajoute à mon dataset) qui correspond parfaitement à ma base d'origine et même si j'affecte la taille suffisante à mon datacolumn (memo) j'ai toujours la même erreur.
    SVP pourriez vous m'aider merci

  2. #2
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    quelle est la taille du champ memo ?

    Bye

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut La taille du champ memo est 606870910
    Voici un petit aperçu de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TITI.CréerColonne(1, "Id_txt", myDatacolumn, Nothing, False, False, MyTable)
                TITI.CréerColonne(2, "Title_txt", myDatacolumn, 100, False, False, MyTable)
                TITI.CréerColonne(2, "body_txt", myDatacolumn, 606870910, False, False, MyTable)
                DS1.Tables.Add(MyTable)
    et la fonction créercolonne est :
    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
    Public Sub CréerColonne(ByVal Choix As Integer, _
                                ByVal NomCol As String, _
                                ByRef MyColumn As DataColumn, _
                                ByVal Taille As Integer, _
                                ByVal AutoInc As Boolean, _
                                ByVal Unic As Boolean, _
                                ByRef Mytable As DataTable)
            Select Case Choix
                Case 0
                    MyColumn = New DataColumn(NomCol, GetType(Boolean))
                Case 1
                    MyColumn = New DataColumn(NomCol, GetType(Byte))
                Case 2
                    MyColumn = New DataColumn(NomCol, GetType(String), Nothing, MappingType.Element)
                    MyColumn.MaxLength = Taille
                Case 3
                    MyColumn = New DataColumn(NomCol, GetType(Date))
                Case Else
                    Console.WriteLine("Le choix doit être compris entre 0 et 6 ")
                    Exit Sub
            End Select
            'Définition des contraintes
            MyColumn.AutoIncrement = AutoInc
            If MyColumn.AutoIncrement = True Then
                MyColumn.AutoIncrementStep = 1
            End If
            MyColumn.Unique = Unic
            Mytable.Columns.Add(MyColumn)
        End Sub

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Quand j'essaie de charger l'objet dataset à partir de la source de données j'aio l'erreur comme quoi le champ est trop petit ...

    voila coment je procède au chargement grace à la fonction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub GetDataSetOleDB(ByVal sQuery As String, _
                              ByRef DS As DataSet, _
                              ByVal i As Integer, _
                              ByVal BaseName As String, _
                              ByVal MaTable As DataTable, _
                              ByVal ParamArray CommandParameters() As OleDbParameter)
     
            Dim objAdapter As New OleDbDataAdapter
            Conn.OuvrirConnexionOleDB(BaseName)
            InitCommand(sQuery, CommandParameters)
            Conn.CloseOleDB()
            objAdapter.SelectCommand = _Commander 
            objAdapter.Fill(DS, MaTable.ToString)
    Sachant que cette fonction marche avec les autres types fde données

    Merci pour votre réponse

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Va voir si ton champ est bien defini dans le schema du dataset

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Comment faire pour voir le schéma du dataset, et s'il n'est pas défini est ce qu'il y a possibilité de le définir explicitement?
    en plus j'ai bien ajouté les colonnes à mon objet datatable et l'objet datatable à l'objet dataset, j'arrive pas à comprendre pourquoi il ne va pas prendre en consideration mes nouvelles colonnes... bref je suis perdu

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu as vérifié que le champ dans la base de données a une taille suffisante ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Le champ de la base de données est de type memo c'est une base Ms Access donc tu peux saisir sans problème en plus en utilisant le chargement automatique(source de données databinding) de visual studio 2005 il réussit à charger le champ memo sans problème j'ai vérifié le code généré y 'avait pas grande chose la taille qu'il a affecté était celle que je donne au champ, dans mon programme.
    Je me demande s'il faut exploiter la propiété errorfill de la méthode fill??

  9. #9
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    A mon avis, tom.nageur est dans le vrai. Tu dois avoir dans ton dataset typé un limitation de la taille de ta donnée.

    Nota : la propriété correspondante dans le dataset doit être un char(xxxxx) car le string devrait tenir la taille (cf. aide) -->
    Contient des séquences de points de code 16 bits (2 octets) non signés dont la valeur est comprise entre 0 et 65 535. Chaque point de code, ou code de caractère, représente un seul caractère Unicode. Une chaîne peut contenir jusqu'à environ 2 milliards (2 ^ 31) de caractères Unicode.

    J'ai fait le test avec un champ mémo et j'ai dans le .designer du dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.columnCommentaire.MaxLength = 536870910
    Donc tu devrais trouver ce "536870910" (pour un mémo c'est toujours ça apparemment) quelque part dans le .designer du dataset. Sinon, c'est que le probléme viens de la définition de ce dataset.

    Cdt.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Je suis d'accord avec le Maxlenght que tu as mentionné j'ai fat la même chose que toi j'ai réussi à charger le memo à l'aide du constructeur automatique (databinding) dans le designer j'ai vérifié le code ce qu je trouve est normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub InitClass()
                Me.columnbody_txt = New System.Data.DataColumn("body_txt", GetType(String), Nothing, System.Data.MappingType.Element)
                MyBase.Columns.Add(Me.columnbody_txt)
                Me.columnbody_txt.MaxLength = 536870910
            End Sub
    Là c'est le code genéré, donc on voit bien qu'ils ont créé une colonne de type string avec un maxlenght de 536870910.

    Mais en essayant d'importer les données dans le dataset à la main sans l'outil automatique je réussis sauf avec le memo ça échoue dans le cas où le contenu du champ est volumineux je crée une colonne avec les mêmes paramètres (utiliser dans l'outil automatique databinding) je la rajoute à la table qui va recevoir les données (voir code les messages en dessus) mais j'ai toujours l'erreur du type le champ est trop petit ...

    J'espère avoir un éclaircissement pour résoudre le problème Merci

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Je suis d'accord avec le Maxlenght que tu as mentionné j'ai fat la même chose que toi j'ai réussi à charger le memo à l'aide du constructeur automatique (databinding) dans le designer j'ai vérifié le code ce qu je trouve est normal :


    Code :
    Private Sub InitClass()
    Me.columnbody_txt = New System.Data.DataColumn("body_txt", GetType(String), Nothing, System.Data.MappingType.Element)
    MyBase.Columns.Add(Me.columnbody_txt)
    Me.columnbody_txt.MaxLength = 536870910
    End SubLà c'est le code genéré, donc on voit bien qu'ils ont créé une colonne de type string avec un maxlenght de 536870910.

    Mais en essayant d'importer les données dans le dataset à la main sans l'outil automatique je réussis sauf avec le memo ça échoue dans le cas où le contenu du champ est volumineux je crée une colonne avec les mêmes paramètres (utiliser dans l'outil automatique databinding) je la rajoute à la table qui va recevoir les données (voir code les messages en dessus) mais j'ai toujours l'erreur du type le champ est trop petit ...

    J'espère avoir un éclaircissement pour résoudre le problème Merci

  12. #12
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Je n'ai jamais rencontré ce soucis avec les types mémo Access et l'utilisation dans un dataset.

    Donc je ne vois pas... désolé...

    As-tu fait le test tout bête de créer un projet, de connecter ta base et de générer un datagridview avec le contenu de ta table ?

    Au moins, tu valideras que cela ne vient pas de ton projet en cours.

    Question bête : ton champ mémo est bien de moins de 536870910 char ?

    Cdt.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    effectivement j'ai fait un test et les données de type memo se chargent parfaitement.
    Ce qui bizarre en fait c'est que je passe en paramètres de la méthode fill ma table qui est configurée à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TITI.CréerColonne(2, "body_txt", myDatacolumn, 536870910, False, False, MyTable)
    Mytable est transmise par référence, car je fais appel à l'instruction suivante :dans la procédure CréerColonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mytable.Columns.Add(MyColumn)
    j'ai essayé de charger directement dans la table Mytable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objAdapter.Fill(MyTable)
    mais j'ai tjrs la même erreur

    "L'erreur suivante s'est produite : Le champ est trop petit pour accepter la quan
    tité de données que vous voulez ajouter. Essayez d'insérer ou de coller moins de
    données."

    là je vais peter les plombs lol mais vraiment je comprends rien à l'aide

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    J'étais en train de réfléchir, comme ça , en fait j'utilise un projetr de type consoleapplication peut être que c'est à cause de ça bon, c'est pas très raisonnable mais quand on est boloqué on pense à tout

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Mes craintes étaient justes car en testant le même code dans un projet de type windows form y'a pas de souci il charge le champ memo sans problème, donc le problème survient du type de projet.

  16. #16
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Alors là je suis vraiment trés étonné ... je ne vois aucune bonne raison pour que le fonctionnement diverge.

    Cdt.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    ENFIN
    J'ai trouvé la raison pour laquelle ça ne marchait pas.
    En fait c'est pas le type de projet mais plutot le mot clé distinct de la requete SQL que j'utilisais :

    "SELECT DISTINCT * from Matable "

    en la mettant comme ça :
    "SELECT * from Matable"
    il ne m'affiche plus l'erreur

    Donc conseil ne mettez jamis le mot clé distinct si vous voulez importer des memo volumineux sinon c'est une semaine de galère lol

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    En fait le mot clé distinct ne peut pas traiter un champs qui dépace 255 caractères, car il utilise un GROUP BY

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

Discussions similaires

  1. problème avec la propriété fill de dataadapter
    Par mathumathu dans le forum Débuter
    Réponses: 1
    Dernier message: 08/07/2010, 18h50
  2. Problème avec la méthode request.form()
    Par sam.fet dans le forum ASP
    Réponses: 2
    Dernier message: 11/08/2006, 17h11
  3. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 15h37
  4. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55
  5. Problème avec la méthode pack()
    Par tomca dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 10h58

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