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

Delphi Discussion :

Modifier le type de données TClientDataSet


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 506
    Par défaut Modifier le type de données TClientDataSet
    Bonjour à tous,

    Est-il possible de modifier directement un type de données sur un champ déjà créé ? (CreateDataSet)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ClientDataSet.close;
    ClientDataSet.FieldDefs[0].DataType := ftInteger;
    ClientDataSet.Open;
    Merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Et sur un ClientDataSet fermé, le problème c'est la source de données, liaison via SetProvider/ProviderName ?
    Quand tu ouvres le ClientDataSet, il est vide sauf si il y a une source, as-tu une erreur pour poser la question, que donnes ton essai ?

    Cela dépend la façon de le créer
    Par champ persistent, soit via IDE soit via Code - La Réponse est NON

    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
     
      with TIntegerField.Create(CDS)do
      begin
        FieldName := 'SensorID';
        FieldKind := fkData;
        DataSet := CDS;
      end;
      with TFloatField.Create(CDS)do
      begin
        FieldName := 'MetricValue';
        FieldKind := fkData;
        DataSet := CDS;
      end;
      with TStringField.Create(CDS) do
      begin
        FieldName := 'Concatened';
        FieldKind := fkInternalCalc;
        DataSet := CDS;
        ReadOnly := True;
      end;
     
      CDS.CreateDataSet();
    Par Champ défini ainsi - la réponse est OUI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      CDS.FieldDefs.Add('SensorID', TFieldType.ftString, 10);
      CDS.FieldDefs.Add('MetricValue', TFieldType.ftFloat);
      CDS.FieldDefs[0].DataType := TFieldType.ftInteger;
      CDS.FieldDefs.Add('Concatened', TFieldType.ftString, 30);
      CDS.CreateDataSet();
    Les deux méthodes étant purement et simplement incompatibles


    Tu ne peux pas modifier un ClientDataSet ouvert, une colonne calculée pourrait faire office de paliatif.
    Voir le sujet Résultat de Query de 2 Query dans un DBGrid qui pourrait être inspirant pour créer par code une colonne calculée.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 506
    Par défaut
    Bonjour ShaiLeTroll,

    Effectivement, il n'est pas possible de modifier la structure d'un champ déjà créé.
    Il y a sûrement possibilité de faire une bidouille, créer un nouveau dataset avec les modifications de champ, puis d'apporter les données dans les nouveaux champs de données.

    Ce qui pourrait poser problème, c'est de passer d'un champ type ftString à un champ type numérique, cela poserait problème lors de l'importation des données.

    En fait l'idée était de créer un simple gestionnaire de données, avec une structure de base fixe

    TabName : ftString
    TabPassword : ftString
    TabData: ftWideString // Ensemble de données compressé
    TabFilter : ftWideString // Ensemble de données compressé

    Chaque enregistrement correspond à un ensemble de données (Table & Filtre).

    J'avais espoir qu'il était possible de modifier la structure déjà créée, Rien n'est impossible .

    Nom : 1.PNG
Affichages : 174
Taille : 114,9 Ko
    Nom : 2.PNG
Affichages : 177
Taille : 123,9 Ko
    Nom : 3.PNG
Affichages : 172
Taille : 111,0 Ko
    Nom : 4.PNG
Affichages : 169
Taille : 104,6 Ko

  4. #4
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 506
    Par défaut
    Après mûre réflexion je pense m'orienter vers le composant Absolute Database, qui serait, je pense, beaucoup adapté.

  5. #5
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 188
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    Après mûre réflexion je pense m'orienter vers le composant Absolute Database, qui serait, je pense, beaucoup adapté.
    Après avoir lu je ne comprends pas le sens de la question.
    Modifier la structure de données n'est pas la responsabilité du ClientDataSet
    Si tu dois le faire c'est au niveau de la base de données qu'il faut agir, par exemple par SQL avec la commande ALTER TABLE xxx MODIFY COLUMN yyyy VARCHAR(X) NULL DEFAULT NULL

    Au niveau du ClientDataSet tu peux faire du transtypage de données, par exemple si une colonne de type Texte contient des valeurs numériques dans la table (ce qui n'est pas bien normalement mais ça arrive) :

    Value:=MonDataSet.FieldByName('NomDuChamp').AsInteger;

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

Discussions similaires

  1. Modifier le type de donné d'une table liée
    Par ZoomBox dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 28/06/2011, 11h58
  2. modifier le type d'un champs
    Par xopos dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 16/12/2008, 15h09
  3. [modifier un type]
    Par viny dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/03/2005, 14h34
  4. Modifier un type défini par l'utilisateur
    Par soazig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2004, 12h47
  5. interbase : types de donnés : AutoIncrement et Date ???
    Par delphien dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/04/2004, 17h29

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