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

Bases de données Delphi Discussion :

[Client DataSet] Comment Insérer manuellement des lignes ?


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut [Client DataSet] Comment Insérer manuellement des lignes ?
    Salut,
    voici les composants que je relie :
    SQLConnexion -> SQLQuery -> DataSet Provider -> ClientDataSet -> DataSource -> DBGrid

    Je pense que ça doit être une chaîne classique, sauf que mon problème est que je voudrais pouvoir passer tous les enregistrements du SQLQuery un à un, faire des champs transformés puis les réinjecter dans le ClientDataSet.
    Mais cette manipulation n'est pas possible.
    Je creuse la cervelle (ainsi que mon collègue) pour trouver la solution pour afficher des champs transformés dans le DBGrid mais apparement cela n'est pas possible.

    Est-ce possible en reliant ces composants d'une façon différente ou doit-on abandonner cette idée et faire complètement différent et achter une corde ?

    Merci pour vos réponses.

    PS : nous avons tester le fait de court-circuiter le DataSet Provider, le ClientDataSet ainsi que le DataSource.
    Nous avons aussi essayé d'utiliser un Simple Client DataSet et d'autres essais encore non détaillés.

  2. #2
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    pourquoi ne pas utilisé les champs de type calculé dans le Query ?
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  3. #3
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Car je dois faire des transformations qui ne sont supportées le moteur SQL.
    De plus, devant faire ces transfo sur tous les moteurs possibles et qu'ils n'acceptent pas les même transfos, je dois donc le faire après avoir récupéré les enregistrements.

  4. #4
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Les champs calculés n'utilisent justement pas le moteur SQL, ils permettent justement de faire des opérations sur les champs retournés par ta requête en utilisant toutes les fonctions de Delphi.
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Cool, cool, je ne connaissais pas, et me suis bien trompé en te répondant.
    Quelle propriété ou méthode du SQLQuery puis-je utiliser dans ce cas la ?

  6. #6
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Voila une réponse déja donnée que j'adapte
    Tu fais un clic droit sur ton Tquery puis tu choisis l'éditeur de champs.
    clic droit dans l'éditeur de champ Puis Nouveau Champ.
    Tu créée un champ de type Calculé que tu nomme à ta guise.
    (il faut aussi 'ajouter tous les champs' pour avoir accès aux autres champs car à partir du moment ou tu utilises l'éditeur de champs, seuls les champs présents ici seront disponibles à tes Datasources.

    Une fois ton champs calculé créé l'évènement OnCalcField de ton Tquery sera fonctionnel pour calculer les champs de type 'champs calculé'.
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

  7. #7
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Merci beaucoup pour cette aide, mais comment pouvoir les créer en dynamique car quand j'essaie en dynamique, il me dit Violation d'accés.

    Voici ce que je fais :
    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
     
    procedure TForm1.BitBtn3Click(Sender: TObject);
    var
      FLigne:TIntegerField;
      FPU:TCurrencyField;
      i:integer;
    begin
      FLigne:=TIntegerField.Create(cds);// cds c'est Client DataSet
      FLigne.
      FLigne.FieldKind:=fkCalculated; // le champ calculé
      FLigne.Name:=cds.Name+'Ligne';
      cds.Fields.Add(FLigne);
      for i:=0 to SQLQuery1.FieldCount-1 do
        cds.Fields.Add(SQLQuery1.Fields[i]); // On rajoute tous autres champs
      FPU:=TCurrencyField.Create(cds);
      FPU.FieldKind:=fkCalculated; // Un autre champ calculé
      FPU.Name:=cds.Name+'PU';
      cds.Fields.Add(FPU);
      for i:=0 to cds.Fields.Count-1 do
        ShowMessage(cds.Fields[i].Name);
      cds.Active := true;
    end;
    Merci.

  8. #8
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 396
    Points : 641
    Points
    641
    Par défaut
    Je te propose cette réponse (que je n'ai pas testée) :
    http://www.developpez.net/forums/viewtopic.php?t=249849
    La faiblesse humaine est d'avoir des curiosités d'apprendre ce qu'on ne voudrait pas savoir

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

Discussions similaires

  1. Comment supprimer réellement des lignes vides ?
    Par lesjno dans le forum Excel
    Réponses: 23
    Dernier message: 13/11/2019, 20h51
  2. Comment masquer automatiquement des lignes dans excel ?
    Par Séphanie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2011, 15h15
  3. Réponses: 3
    Dernier message: 16/09/2010, 12h54
  4. Réponses: 5
    Dernier message: 07/07/2009, 16h55
  5. Réponses: 2
    Dernier message: 07/12/2005, 16h26

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