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 :

Donnée dans un fichier text


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut Donnée dans un fichier text
    Bonjour,

    Tout juste une question. J'ai fais une fenêtre qui calcul des consommations. Mon petit programme n'est pas lié à une base de donnée. Les consommations sont multiplier par des valeurs qui peuvent subir des modifications d'une moment à l'autre. Ces valeurs sont inscrit dans des variables de mon programme. Si il y' a des modifications des valeurs, il faut a nouveau modifier le programme.
    Je veux laisser l'utilisateur modifier les valeurs à sa guise.
    Je ne veux pas aussi faire une base de donnée pour cette petite fenêtre de calcul.
    Comment faire de tels sorte que l'utilisateur puisse accéder à ses valeurs depuis des fichiers texte qui joueront un rôle de table?
    Merci pour toutes aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Le TClientDataSet te permet de travailler sur un fichier (XML par exemple) sans moteur de base de données et l'ajout d'agrégats fera les calculs à ta place .

  3. #3
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut Andnotor,

    Merci d'avoir répondu à mon post. Je n'ai jamis utilisé TClientDataSet ni un fichier XML. Si il y'a un exemple je suis preneur. Merci.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Tu poses simplement un TClientDataSet sur ta fiche.
    Dans l'inspecteur d'objet, tu edites FieldDefs et ajoute tes champs.
    Ensuite click-droit sur le composant et Créer un ensemble de données.

    C'est tout .

    A la fermeture de ta fiche (ou par un bouton, etc.), ClientDataSet1.SaveToFile().

    Avec deux champs (F1, F2) respectivement de type string et integer, le fichier (vide) donne ceci:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" standalone="yes"?>
    <DATAPACKET Version="2.0">
    	<METADATA>
    		<FIELDS>
    			<FIELD attrname="F1" fieldtype="string" WIDTH="20"/>
    			<FIELD attrname="F2" fieldtype="i4"/>
    		</FIELDS>
    	</METADATA>
    	<ROWDATA>
    	</ROWDATA>
    </DATAPACKET>

    Le reste se gère comme une base de données (DataSource, DBGrid, etc.)

    Et au chargement, soit on ouvre le fichier, soit on crée la table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      FileName :TFileName;
    begin
      FileName := 'c:\temp\Test.xml';
     
      if FileExists(FileName)
      then ClientDataSet1.LoadFromFile(FileName)
      else ClientDataSet1.CreateDataSet;
     
      ClientDataSet1.LogChanges := FALSE;
    end;
    LogChanges n'est pas requis lorsqu'on travaille sur un fichier -> FALSE.

    Plus d'info ici.

  5. #5
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Je vais faire un test et vous tenir au courant. Merci d'avance.

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    mieux utiliser un fichier texte avec TStringList ou les fichier (ini) par example
    avec les TstringList, t'as les fonction values, savetofile, readtofile, se que je préfére plus que les fichier ini,
    avec Tclientdataset, il te faut la dll midas avec l'exe,
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  7. #7
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut,

    Je suis de retour après quelques temps de silence. J'ai suivis ton explication à la lettre. J'ai pu crée le fichier xml.
    Pour insérer les données j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      ClientDataSet1.Edit;
      ClientDataSet1.Fields.Fields[0].AsString := Edit1.Text;
      ClientDataSet1.Fields.Fields[1].AsString := Edit2.Text;
      ClientDataSet1.Fields.Fields[2].AsInteger := StrToInt(Edit3.Text);
      ClientDataSet1.Fields.Fields[3].AsString := Edit4.Text;
      ClientDataSet1.Post;
    j'ai remarquer qu'il faut faire un genre append comme pour les tables. Mais je n'arrive pas à m'en sortir. Si je fait ClientDataSet1.AppendData( l'info bulle donne Const Data Ole Variant; HitEOF:boolean. Je sais que Ole Variant c'est le fichier xml, mais je ne connait pas ce qui suis...
    Enfin je veux savoir comment lire dans le fichies xml. Est-ce possible de ramener des lignes par rapport à un critère donnée comme en sql?.
    Pouvez-vous m'aider à comprendre. Merci.

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Utilise Append/Post ou AppendRecord.

    Avec ce principe, tu n'as pas la puissance du SQL, mais tu peux tout de même utiliser Filter qui correspond à la clause Where (sur une seule table !) et les aggrégats pour les calculs (Count, Sum, etc.)

  9. #9
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Salut Andnotor,

    Merci de m'avoir répondu. La append marche bien. A présent, si ce n'est pas trop te demander, puis-je avoir un exemple avec avec filter et un exemple avec les agrégats pour les calculs. Merci d'avance.

  10. #10
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    J'ai mis le filtre en place en utilisant Tlocate. Il reste à faire les sum...

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    En prennant une requête du style:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from MaTable where F1=10 and F2='MonText'

    • Filter = F1=10 and F2='MonText'
    • Filtered = TRUE


    Tu as plein d'exemples dans l'aide .

    Pour les aggrégats:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Sum(Qty*Price) from MaTable WHERE F1=10 AND F2='MonText'

    • Double-click sur le composant TClientDataSet,
    • Click droit et Nouveau champ,
    • Donne un nom au champ et sélectionne Agrégat.


    Dans les propriétés de l'agrégat:
    • Active = TRUE
    • Expression = Sum(Qty*Price)


    Dans les propriétés du TClientDataSet:
    • AggregatesActive = TRUE

  12. #12
    Membre habitué Avatar de sondo
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Août 2004
    Messages : 540
    Points : 162
    Points
    162
    Par défaut
    Merci beaucoup Andnotor de m'avoir aidé. J'ai trouvé intéressant cette méthode d'utilisation des fichiers xml. Encore merci. A très prochainement.

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

Discussions similaires

  1. [VBA-E]Ecriture de données dans un fichier texte
    Par osito57 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/08/2017, 19h42
  2. [vb6]:Ajuster des données dans un fichier text avec un timer
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 28/07/2006, 12h13
  3. Extraction de données dans un fichier texte en VB6 !
    Par rockroa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/06/2006, 16h00
  4. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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