DELPHI 6 : comment mettre à blanc un ...

Fermé
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 - 28 mars 2002 à 22:06
 Utilisateur anonyme - 12 févr. 2008 à 14:46
Bonjour,

Voilà sous Delphi 6 j'ai une fiche toute simple sur laquelle j'affiche les enregistrements d'une table.
Cette table est en lecture seule.
J'ai en fait un TTable et un TDataSource qui pointe dessus.
J'utilise une table Paradox (en attendant MySql)

En plus des champs liés à ma table j'ai un champ standard dans lequel je saisis un clé : si cette clé correspond à un enregistrement de ma table je le recherche et Delphi m'actualise automatiquement tous mes champs liés. OK jusque là ...

Par contre si la clé saisie ne correspond à aucun enregistrement je désire que tous les champs soient mis à blanc.

Or la seule façon que j'ai trouvé c'est de mettre la propriété Enabled du TDataSource à false.

C'est mieux que de rendre le TTable inactif mais quand même ...
Existe-t-il un autre moyen ?

Car lorsque ma Table n'est plus en lecture je ne peux plus alors utiliser le mode AutoEdit au niveau du TDataSource avec ce système.

Merci

@+
Philippe


PS : j'aurais pleins d'autres questions notemment comment accèder à MySql avec dbExpress mais chaque chose en son temps !
Cela si quelque l'a déjà fait ... ;:-)

[[  The Truth is Out There   ]]
A voir également:

5 réponses

alicia_3107 Messages postés 4546 Date d'inscription lundi 8 octobre 2001 Statut Membre Dernière intervention 17 février 2015 6
29 mars 2002 à 11:23
>Par contre si la clé saisie ne correspond à aucun enregistrement >je désire que tous les champs soient mis à blanc.

Tu sais bien que des composants (TDBEdit ou TDBGrid) liés à une table PARADOX ne font qu'afficher le contenu de la table en question (table à laquelle ils sont liés).

Désirer avoir des champs blanc c'est faire en sorte de les créer ces champs blanc !

Je ne sais pas si j'ai bien compris ton problème, mais je suppose que lorsque tu saisi une clef non existante dans le composant standard tu voudrais insérer un nouvel enregistrement ! si c'est ça que tu veux alors c'est simple, il suffit d'utiliser la fonction

ta_table.insert;
ta_table.fieldbyname('le_champ_clef').asstring := edit1.text;
ta_table.post;

et pour faire apparaître les champs blanc, il suffit de pointer sur l'enregistrement qui vient d'être ajouté en utilisant

ta_table.locate('le_champ_clef', edit1.text, []);

Je ne suis pas trés sûr que c'est cela que tu veux vraiment, alors précise si j'ai pas bien compris

</alicia_3107>
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
29 mars 2002 à 12:27
Bjr Alicia,

Bien sûr avec un insert on arrive à détourner une partie du pb.
Cependant lorsque ma table est en lecture seule je ne vois pas pourquoi j'irais ajouter un enregistrement.

En fait au-delà de ce petit exemple, ce que j'essais de faire c'est une relation maître/détail mais je ne veux pas utiliser les propriétés MasterSource et MasterField car :
1) Ca plante souvent j'ai des erreurs du type "stack overflow"
Faut "casser" la relation lorsqu'on souhaite parcourir la table esclave de A à Z
2) Je compte passer sur MySql avec dbExpress et les relations maîtres/détails n'existent pas avec ce type d'objet.

Prenons un ex si j'ai une table CLIENT et une table COMMANDE si j'établis une relation maître/détail de type 0-N, lorsque je sélectionne un client qui n'a passé aucune cde, la liste des commandes reste vide.
Maintenant comment faire sans mettre en place une relation maître/détail ?



Autre question : comment faire dans un TListView pour permettre à l'utilisateur de modifier l'ordre des colonnes à sa guise (comme dans l'explorateur de Windows) ?


Dernière question : comment faire pour simuler un TDBListView ?
Si je dérive un composant TListView en TDBListView et que je lui ajoute une propriété de type TDataSet (entres autres) comment faire pour que le TDataSet informe (sous la forme d'une notification je suppose) mon TDBListView de tous les changements qui peuvent intervenir ?


Merci encore de m'avoir répondu ;:-)

@+
Philippe


[[  The Truth is Out There   ]]
0
alicia_3107 Messages postés 4546 Date d'inscription lundi 8 octobre 2001 Statut Membre Dernière intervention 17 février 2015 6
29 mars 2002 à 14:27
AH D'accord. J'ai compris ton problème. TROP FACILE.

J'ai la solution, mais comme là je n'ai pas beaucoup de temps je te répond ce soir PROMI.

</alicia_3107>
0
alicia_3107 Messages postés 4546 Date d'inscription lundi 8 octobre 2001 Statut Membre Dernière intervention 17 février 2015 6
30 mars 2002 à 07:30
Bonsoir PhiliPPe !

. En ce qui concerne la relation maître-détail il existe une solution trés simple et trés efficace : Tu dois exécuter un "filtre" de la table "détail" lors de l'évènement AfterScroll de la table "maître".

Je m'explique ...

Supposons que tu as une table contenant la liste des CLIENTS et une table de COMMANDES. Chaque client peut en effet passer plusieurs commandes et tu voudrais afficher pour chaque CLIENT la liste de SES COMMANDES UNIQUEMENT.

Tu procèdes comme suit

----------------------------------------------------------------------------
procedure TForm1.Table_des_clientsAfterScroll(DataSet: TDataSet);
begin
Table_des_commandes.filter = 'code_client = '''+Table_des_clients.FieldByName('code_client').AsString+''' ';
Table_des_commandes.filtered := True;
end;
----------------------------------------------------------------------------

. Quand à des deux autres problème, je suggère que tu utilise le composant TDBGRID à la place de TVIEWLIST, car non seulement TDBGRID affichera une liste de ce que tu veux, mais il permet à l'utilisateur de changer l'ordre des colonnes et il est relié à une table de BDD, un simple table.refresh est une notification qui permet au DGGRID d'afficher les dernières mises à jours de la table. En plus si tu vas dans la propriété OPTIONS de DBGRID, tu pourras changer l'apparence de ton DBGRID (il pourra ressembler à un TLISTVIEW).

Voilà, j'espère que j'ai répondu à tes questions, sinon tu me fais signe. Je sais que c'était prévu que je te réponde hier, mais j'étais crevée et y avait des coupures d'élèctricité répétées qui m'ont découragée :o)))))))

Bonne journée à tous

</alicia_3107>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
12 févr. 2008 à 14:46
Bonjour,
merci d'aller voir sur cette convers. et de m'aider si possible
bonne journée
0