Afficher le contenu d'un .txt dans un TMemo

Afficher le contenu d'un .txt dans un TMemo - Delphi/Pascal - Programmation

Marsh Posté le 14-01-2007 à 11:12:36    

Bien bien bien...  
 
Y'a pas à dire, le Delphi c'est pas trop in, hein, comme langage...  :heink:  
En PHP, y'a plus de vie sur les forums...  
 
Comme je sais jamais comment on vire un message, j'en suis donc à la troisième édition de celui ci, pour mon troisième pb. En l'occurence, c'est plutôt une interrogation.
 
En fait, j'ai une table que je vais remplir grace à un formulaire. Jusque là tout va bien. Seulement, le truc qui m'interroge un peu, c'est que je veux qu'un des champs de ce formulaire soit en fait un petit texte qu'on peut taper. Je pense donc enregistrer ce texte dans un dossier du style .txt, parce que sinon il me semble qu'on est limité à 255 caractères, puis ça ferait une base trop lourde t'façons.
 
C'est à dire que quand on valide le formulaire, il faudrait que chaque champ enregistre ce qui le concerne, et qu'en même temps un (l'id de l'enregistrement).txt soit créé pour le petit texte associé. Il s'agirait ensuite de pouvoir l'afficher, quand dans le prog on veut afficher les enregistrements.
 
Des idées ? Des pistes ? Je pense pouvoir peut-être me débrouiller pour l'enregistrement, mais je sais pas trop comment faire pour pouvoir afficher ensuite
 
Merci d'avance, si jamais je découvre que je ne suis pas la seule personne à oser m'aventurer dans la partie Delphi du forum  [:alph-one]
 
 
 
 
Nan mais sérieux, c'est mort à ce point le Delphi ?
Même pas un message d'un inconnu style "Machin was here", tel jour  :sweat:  
 
 
Bon, un pb en plus, si quelqu'un a une solution miracle, parce que j'en trouve pas. J'ai deux tables qui ont des index secondaires. Leur nom fait genre une dizaine de caractère ou un peu plus pour chacun.
 
Seulement là, ma troisième table est racalcitrante. Pas moyen de créer un seul index parce que "File name is too long for a Paradox version 5.0 table". Seulement même quand je tente un truc à trois pov caractères, il me jette.
 
Est-ce que par miracle, quelqu'un lira ce message ? Est-ce que par un miracle encore plus grand, quelqu'un pourra y répondre ?  [:alph-one]


Message édité par $temp le 16-01-2007 à 10:58:36
Reply

Marsh Posté le 14-01-2007 à 11:12:36   

Reply

Marsh Posté le 16-01-2007 à 11:30:49    

El zozo was here  :hello:  

Spoiler :

Mais c'est vrai que c'est un peu mort  :cry:


 
Pour le problème n°1, le plus simple (de loin) me parait etre de créer une colonne Blob dans ta base (Type "TEXT" en My SQL ou en MS SQL Server, mais je sais pas si c'est un type "officiel" en SQL) et d'y associer un controle TDBMemo.
 
Sinon, une solution "de haute voltige" (et surtout adaptable pour n'importe quel cas) est d'utiliser les TFieldDataLink.
 
DataFieldLink := TFieldDataLink.Create;
DataFieldLink.fieldname := NomChamp;
DataFieldLink.DataSource := Datasource;
DataFieldLink.Control := MonMemo;
DatafieldLink.OnDataChange := RemplirMemo;  //une methode de type TNotifyEvent
 
Ainsi, une modfication du champ du dataset lié au datasource (qui se retrouve lui mème lié au Memo) déclenchera la procédure RemplirMemo.

Reply

Marsh Posté le 16-01-2007 à 13:50:13    

:love:  Enfin quelqu'un !
 
J'ai pas tout compris à tes conseils, vu que je suis débutante, mais en tout cas je vais tenter de tatonner pour mettre ça en application. Merci !

Reply

Marsh Posté le 16-01-2007 à 15:55:24    

Faut positiver, j'apprends à me débrouiller par moi même au moins...


Message édité par $temp le 16-01-2007 à 16:11:49
Reply

Marsh Posté le 16-01-2007 à 19:02:55    

Arf!!! Le probleme de ce forum, c'est aussi que c'est bouré de débutant... forcement, il reste pas grand monde pour repondre aux question.. alors progresse vite  :lol:  
 
Bon... Tu sais te servir des controls du genre TDBEdit?
Si oui, TDBMemo, ca marche de la meme façon sauf que le champ corespondant dans la base est du type TEXT ou équivalent(une variable texte pouvant faire plusieur lignes) ce qui supose que ta base suporte ce type. Si je me rapelle bien, n'est pas le cas de Paradox.  :(  
Si tu ne sais pas te servir d'un TDBEdit, ben euh... tatonne un peu  (c'est dans l'onglet DBControl)
 
                                           -------------------------
 
Pour la solution avec le DataFieldLink, c'est un peut plus pointu (le code est court, mais si on le comprend, c'est mieu). Mais si tu veut absolument utiliser des memo avec une base de donnée ne sachant pas les gerer, c'est la méthode la plus propre et la plus réutilisable (j'ai pas dit la plus simple).
 
En gros, tu utilise un objet de type TDataFieldLink qui a pour fonction de surveiller un champ de la base de donnée. Quand ce champ est modifié (quelle que soit la source de la modification), cet objet appele la méthode OnDataChange.
 
La subtilité, c'est que OnDataChange n'est en fait pas une "vrai" méthode, mais une variable de type méthode (plus exactement de type TNotifyEvent).
Il faut donc déclarer une méthode (au niveau du TForm1, par exemple) avec la mème "signature", puis l'affecter à OnDataChange et là, miracle : sans que tu n'ai a programmer quoi que ce soit, dès que le champ change (donc, sur un next, un open, un Previous, un Close, voire un Post), la méthode sera appelée.
 
Grosso modo, ça donne (j'ai pas de Delphi sous la main pour vérifier, mais n'hésite pas à te balader dans l'aide en ligne):
 

TForm1
  private  
     procedure ChargementMemo1(sender: TObject);  //equivalent au type "TNotifyEvent"
   (...)
end;
 
implementation
 
procedure TForm1.OnCreate(...)
begin
  DataFieldLink := TFieldDataLink.Create;
  DataFieldLink.fieldname := NomChamp;  //pour ce que tu veut faire, l'id sera parfait
  DataFieldLink.DataSource := Datasource;
  DataFieldLink.Control := MonMemo;
  DatafieldLink.OnDataChange := ChargementMemo1;  //une methode de type TNotifyEvent  
end;
 
procedure TForm1.ChargementMemo1(sender: TObject);
//au sein de cette procedure, Sender est l'objet ayant appelé la méthode. Si le code ce limite à cet exemple, c'est donc forcement DatafieldLink
begin
  //A toi de jouer, je ne vais quand mème pas tout faire
end;


 
Et que l'esprit du grand Anders Hejlsberg t'acompagne, ma petite  [:adodonicoco]


Message édité par el zozo le 16-01-2007 à 19:15:38
Reply

Marsh Posté le 17-01-2007 à 10:59:02    

Salut El Zozo (et pensée pour l'esprit d'Anders Hejlsberg, s'il traine dans le coin (il est pas mort, nan ?))
(Salut aussi à toi qui erre sur ce post, si tu existes)
 
Je viens présenter mon pb du jour : j'ai des enregistrements que je veux pouvoir modifier.
C'est à dire que j'affiche dans des edits ce qui correspond à un enregistrement, et que je peux changer mes trucs. L'idéal serait que quand je clique sur 'enregistrer les changements', ben ça les enregistre.
 
D'où la question : comment que je fais pour me positionner dessus, et pour pouvoir modif la valeur des champs ?
 
Et une autre question : pourquoi j'arrive pas à trouver ces infos en cherchant sur le net ? Je sais pas me servir de l'aide ? Ou alors je suis trop habituée au php pour lequel on trouve plein d'infos en ligne assez facilement ? Pire, je suis neuneu ?!??


Message édité par $temp le 17-01-2007 à 10:59:37
Reply

Marsh Posté le 17-01-2007 à 12:25:30    

Moi z'veux bien aider, mais mets y un peu du tien  :na:  
1) nouveau probleme => nouveau sujet
2)Utilise un terme un peu plus prècis que "enregistement" . Parle tu d'un enregistrement Pascal(type record), d'un enregistrement dans un fichier (file of record) ou d'une ligne dans une table relationnelle?
3)Pour éviter les ambiguité, utilise tant que possible les nom exact des type utilisés. Quant tu dit que tu affiche dans "des edits", tu parle de controls de type TEdit ou TDBEdit? Si c'est TDBEdit, il suffit d'une commande MonDataset.post (ou MonDataset est le dataset lié au TDBEdit).
 
Et ouai, c'est comme ça : j'suis un vieu con  :kaola:  
 
Pour l'aide de Delphi, une raison pour laquelle on ne trouve pas de site contenant l'aide à proprement parler, c'est que l'aide de Delphi (la touche F1 est ton amie) est très bonne. Ca doit etre ta première source d'info.
La raison pour laquelle on ne trouve pas de tutorial sur le net... la c'est domage  [:calimero]

Reply

Marsh Posté le 20-01-2007 à 13:26:08    

el zozo a écrit :


La raison pour laquelle on ne trouve pas de tutorial sur le net... la c'est domage  [:calimero]


 
Salut à vous
 
ce que je trouve dommage c'est qu'il n'y a pas beaucoup d'exemple dans l'aide :/
 
certe c'est hyper complet mais quand on débute et qu'on voit "appellez la méthode de classe héritée de Tclecaillon"* et bah ça fait peur, avouez qu'il faut être un debutant expérimenté lol, alors qu'une ligne de code c'est souvent  bien  plus parlant
 
faut surtout pas oublier le guide de Frédéric BEAULIEU http://fbeaulieu.developpez.com/guide/index.html
 
 
 
* faut pas chercher ça veut rien dire [:athlonxp2100+]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed