Saisie automatique dans un Champ dbmémo à pd'une dblookuplistbox [Résolu]

AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 21 mars 2008 à 05:48 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 31 mars 2008 à 20:47
Bonjours à tous de AEC1.
Si quelqu'un à une petite minute pour jeter un coup d'oeil sur mon petit souci qui me fait tourné en bourique, je l'en remercie par avance.
Dans une application base de données Delphi.
Pour mettre une ligne d'une dblookuplistbox dans un dbmemo je sais faire, mais chaque ligne que je met écrase celle déjà dans le dbmémo, alors que je souhaiterais qu'elle si ajoute à la suite afin de composer un texte diront-nous semi-automatique qui correspond à des explications types dans un context précis des autres données d'un enregistrement.
Egalement le copié / collé d'un dbmémo à un autre serais bien que cela soit possible.
Merci d'avance à tous.
Afficher la suite 

21 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 26 mars 2008 à 19:53
+3
Utile
Oui, c'est normal, la propriété lines n'existe pas pour le dbedit..
Tout dépend de ce que tu veux faire exactement, bien sûr.
ex: sur le double-clic tu peux faire ceci :

procedure TForm1.DBLookupListBox1DblClick(Sender: TObject);
begin
MonQuery.Append;
DBEdit1.text := DBLookupListBox1.SelectedItem;
MonQuery.Post;

ainsi sur chaque double-clic, tu remplis la table liée au DBEdit.
(attention au doublon toutefois..)

ou faire une édition
MonQuery.Edit;
DBEdit1.text := DBLookupListBox1.SelectedItem;
MonQuery.Post;
mais dans ce cas, il faut s'assurer d'être sur le bon enregistrement...
->>> nécessiter de faire une liaison quelque part ou de lancer un Locate.

merci de cliquer "réponse acceptée" si çà te convient

@+
cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 27 mars 2008 à 05:52
+3
Utile
Merci cantador
Effectivement c'est tout simple et je suis passé à côté sachant que j'utilise les "edit" depuis longtemps comme tout le monde.
Merci encore de ta patience et encore merci à tous ceux qui font que ce site soit conviviale pour des passionnés autodidactes et non professionnels.
A très bientôt le plaisir et peut-être je pourrais déposer  à mon tour  des prg  qui puissent interresés la communauté Delphi.
AEC1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 mars 2008 à 14:09
+3
Utile
"et je suis passé à côté sachant que j'utilise les "edit" depuis longtemps comme tout le monde."

On en est tous là..
Il faut revenir aux sources et çà fait du bien..

et NE PAS OUBLIER DE CLIQUER sinon
cantador va se mettre en colère !

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 27 mars 2008 à 17:18
+3
Utile
Bonjours cantador
Excuse-moi pour le clique oublié.
Je promet de ne plus le refaire hi hi  ....
Ne te met pas en colère, ce serais dommage et puis j'aurais surement encore besoin de tes services. En tous cas tu m'as quand même beaucoup aidé et je t'en remercie.
A une chose encore, le dbedit fonctionne très bien déjà quand on utilise les paramètres de ce composant sauf que tu as fais la même chose avec du code.
Cela dit, je souhaité seulement pouvoir ajouter autant de lignes mise bout à bout venant de la dblookuplist dans un dbedit. Bien sur sans dépassé le maximum du nombre de caractères dans celui-ci que j'aurais déffini par avance dans mon fichier.
Merci et à bientôt.
AEC1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 mars 2008 à 19:54
+3
Utile
non non rassure toi, c'était une boutade..
Je me mets rarement en colère..Enfin de temps en temps je hausse un peu le ton car il y en a qui dépasse les bornes..
Je n'ai pas pu te donner la paramétrage pour faire apparaître le LOOKUP
mais c'est simple avec la listsource, le keyfields et la ListFields.

Cela dit, je souhaité seulement pouvoir ajouter autant de lignes mise bout à bout venant de la dblookuplist dans un dbedit. Bien sur sans dépassé le maximum du nombre de caractères dans celui-ci que j'aurais déffini par avance dans mon fichier.

De toute façon si c'est un champ de table ton texte sera tronqué à la longueur déclarée.

Pour mettre des lignes bout à bout (tu nous fais un pullover..)
Tu peux passer par une variable intermédiaire :
var
conca : string;
begin
conca := conca + TaChaine;
.....

mais avant d'aller plus loin, il me faut plus d'explications :

combien as-tu de champs (TDBEdit) à éditer :
un seul ou plusieurs ?
et si c'est un seul, est ce tjrs le même champ ?

@+

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 28 mars 2008 à 05:43
+3
Utile
Bonjours cantador
Efectivement je n'ai qu'un champ dbedit. Plutôt que de passer par le composant lui-même, par ses paramètres, je pensais que par un code au niveau de la dblookuplist je pouvais choisir en double clique dans cette liste autant de lignes que je souhaite et qui se mettent bout à bout dans le champ dbedit. Bien sur se sont des messages très cours et qui sont sensés tenir dans la dimension du dbedit prévu au départ.
Pour l'instant, quand je clique dans la list j'écrase le choix précédent au lieu de l'ajouter.
Cela n'est peut être pas possible, alors je m'orienterais vers un autre dbmemo si je ne puis faire autrement. Mais je trouvais cela quand même sympa de le faire quand on à peut d'info pour composer une seule ligne d'info.
Merci à toi quand même, à un de ses moments.
AEC1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 mars 2008 à 19:55
+3
Utile
procedure TForm1.DBLookupListBox1DblClick(Sender: TObject);
var
conca : string;
begin
   conca := '';
    conca := DBEdit.text;  {on récupère ce qu'il y a dans le dbedit}
    conca := Conca + DBLookupListBox1.SelectedItem;
    MonQuery.edit;
    DBEdit.text := Conca;    // On écrase la nouvelle valeur
    MonQuery.Post;
end;

çà devrait marcher..

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 30 mars 2008 à 07:56
+3
Utile
Bonjours Cantador
Merci pour ton aide, Cela devrais pouvoir fonctionné dans le contexte de l'application que je réalise. A bientôt .
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 30 mars 2008 à 09:00
+3
Utile
Re salut Cantador
J'ai fait un essai et ton code fonctionne, mais il y à un mais, il fonctionne trop bien.
Quand je clique sur une ligne de la dblookuplist j'ai deux fois celle celle-ci mise bout à bout. Je me suis peut-être mal expliquer, je souhaitais remplir le dbedit d'une ligne de cette liste puis ensuite cliquer sur une autre ligne de cette même liste qui donc se serais ajouter à la première sans l'écrasé. Que je puisse le faire autant de fois que le permet la longueur du champ du dbedit.
AEC1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 30 mars 2008 à 13:37
+3
Utile
Quand je clique sur une ligne de la dblookuplist j'ai deux fois celle celle-ci mise bout à bout.



J'avais prévu un double-clic et non un clic par précaution..sinon çà devient ingérable..


Pour la manip, j'ai bien compris.
Donc deux conditions :

Eviter de faire rentrer deux fois la même chaîne.
Fixer la limite de la taille à la longueur du champ.

procedure TForm1.DBLookupListBox1DblClick(Sender: TObject);
var
conca : string;
begin
   conca := '';
    conca := DBEdit.text;  {on récupère ce qu'il y a dans le dbedit}
    if conca <> DBLookupListBox1.SelectedItem then
        conca := Conca + DBLookupListBox1.SelectedItem;
    MonQuery.edit;
    DBEdit.text := Conca;    // On écrase la nouvelle valeur
    MonQuery.Post;
end;

Essaie cette solution et vérifie que la chaîne se tronque toute seule sinon on ajoutera un truc en plus..

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 31 mars 2008 à 20:38
+3
Utile
Bonjours Cantador
C'est bon, cela fonctionne très bien. Il faut seulement faire attention  quand  on  saisi dans le champ on clique une fois sur une première ligne de  la dblookuplistbox puis sur une seconde d'un choix différent et tout roule bien seulement comme le champ dbedit est relativement cours environ une quarantaine de caractères, il faut que chaqu'une de mes lignes pré-programmées dans la liste soit elles aussi plutôt courtes. De toutes façon, au troisième clique éventuel cette ligne sera tronquée automatiquement.
Merci encore pour ton aide précieuse, il ne manque qu'un peut d'imagination!...
Merci et Amitiés....
AEC1
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 31 mars 2008 à 20:47
+3
Utile
il faut que tu cogites un peu ton truc et après tu pourras reprendre le débat..


@bientôt

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 mars 2008 à 19:09
0
Utile
DBMemo.Lines.Add('toto');
DBMemo.Lines.Add('tata');

cantador
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 23 mars 2008 à 06:57
0
Utile
Bonjours cantador de AEC1
Merci d'avoir répondu à ma petite requête.
Si je puis abusé encore c'est parce que je ne saisie pas bien la syntaxe entre
la dblookuplistbox et le DBmemo car effectivement ajouter des lignes dans le DBmemo est une chose, mais comment on peut en cliquant dans la dblookuplistbox sur la ligne qui t'intérresse ajouter cette ligne et pas une autre dans le DBmemo.Passe-tu pas une variable spécifique?
Merci à toi et à un de ces moment. Salutations.
AEC1
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 23 mars 2008 à 13:18
0
Utile
Non non c'est simple il faut utiliser un évènement du dblookuplistbox
soit le OnClick, le OnMouseDown et envoyer l'item de la liste directement dans le Memo.

cantador
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 24 mars 2008 à 07:58
0
Utile
bonjours cantador de AEC1
j'ai déjà utiliser les paramètres propres à la dblookuplistbox en tant que la source et la cible dans la liste des paramètres automatiques mais quand je clique dans la dblookuplistbox cela m'écrase à chaque fois le mémo déjà écrit. Donc si j'ai bien compris il me faut évité d'utiliser se système car quelque soit le code utilisé il ne sera jamais pris en compte car par défault il utilise le paramètrage direct de la lookuplistbox.
merci de me comfimer tous cela et merci encore pour ta patience.
AEC1
Commenter la réponse de AEC1
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 24 mars 2008 à 08:01
0
Utile
AEC1
Oui j'oublier, comment fait-tu pour que la selection faite dans la lookuplistbox soit la bonne à copier dans le dbmemo. A la place de ton toto ou tata, utilise-tu une variable.
salutations.
Commenter la réponse de AEC1
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 24 mars 2008 à 13:26
0
Utile
voilà :
la base est dbdemos.mdb, deux query, un dbLookupListBox et un Memo
(on peut facilement transposer pour un DBMemo en faisant une édition du champ)

J'ai choisi pour évènement le double-clic car il se prête bien..mais on peut aussi faire plein d'autres chose comme le drag an drop par exemple..

unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, DBCtrls;


type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBLookupListBox1: TDBLookupListBox;
    ADOQuery2: TADOQuery;
    DataSource2: TDataSource;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure DBLookupListBox1DblClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}




procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOQuery1.Open;
  ADOQuery2.Open;
end;


procedure TForm1.DBLookupListBox1DblClick(Sender: TObject);
begin
Memo1.Lines.Add(DBLookupListBox1.SelectedItem);
end;


end.

cantador
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 24 mars 2008 à 13:29
0
Utile
nb :
la table principale est Orders(adoquery1) et pour le lookup, j'ai pris customer(adoquery2)

cantador
Commenter la réponse de cs_cantador
AEC1 98 Messages postés mercredi 31 octobre 2007Date d'inscription 24 décembre 2012 Dernière intervention - 25 mars 2008 à 05:44
0
Utile
Bonjours cantador
Merci pour tes infos, je vais essayer cela et te tiens informé de ce que j'aurais fait.
Je comprend le problème et ses differentes pssibilités mais pour les appliquer cela est un peut plus floue. Merci du temps que tu m'as accordé et de m'avoir mis sur la voie.
A très bientôt le plaisir.
AEC1
Commenter la réponse de AEC1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

saisie automatique dans un Champ dbmémo à pd'une dblookuplistbox - page 2