Une recherche positive empêchant une sauvegarde...

Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011 - 17 mars 2010 à 16:20
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 18 mars 2010 à 09:10
Salut!

J'ai une base de données ayant plusieurs champs. Mais je veux juste parler d'un seul avec mes codes écrit ci-bas afin de me faire mieux comprendre.

Mon problème est celui-ci:
dans ma base, il y a un champ appelé "companie". Et je fais une recherche en disant: si le nom de la companie demandée figure dans ce champ, la sauvegarde ne peut être faite.


Ma_table.Filter:='companie=' +quotedstr(cbx_companie.Text);
Ma_table.Filtered:=True;

if Ma_table.IsEmpty then begin
end else
showMessage('cette companie existe déjà dans le système...');

with Ma_table do
Ma_table.Append;
Ma_table.FieldValues['mon_client']:= edt_client.Text;
Ma_table.Post;

Donc, la sauvegarde ne pourra être faite en une condition. Si est seulement si le nom d'une companie n'a jamais été enregistré dans le système.

Curieusement, avec les codes ci-dessus je reçois naturellement le message de l'existence de la companie dans la base. Mais comment empêcher la non sauvegarde de données quand la donnée existe déja.

LunaSoft

4 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
17 mars 2010 à 16:42
bonjour,

En résumé, tu souhaites empêcher
la saisie de doublons dans ton champ.
sujet, ancestralement étudié..

je te renvoie sur un des articles traitant le SQL correspondant à ta base à cette adresse :

BDD

ou plus simplement encore en mettant un index unique sur le champ + gestion
d'erreur style try....except...end

cantador
0
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
17 mars 2010 à 18:19
bonsoir,

compagnie ou companie ?
0
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011
17 mars 2010 à 18:41
Huuum, bem. C'est pas vraiment ça que je veux. Je m'explique encore mieux ici en deux mots:

1. quand je cherche dans ma base de donnée:
Ma_table.Filter:='companie=' +quotedstr(cbx_companie.Text);
Ma_table.Filtered:=True;

si la companie y est. Je ne peux en aucun cas faire ni du "edit" (marcher dessus). Ni du "append" (sauvegarde des données diverses mais toujours dans de la même companie).

2. quand tu trouves la companie dis le moi:
if Ma_table.IsEmpty then begin
end else
showMessage('cette companie existe déjà dans le système...');

ce point c'est correct. Ça marche jusque là

3. la sauvegarde peut se faire à tout moment tant que ces codes sont en runtime. Mais à l'exécution de la recherche, si la companie est rencontrée dans la base. Que le mode "append" ou "edit" ne fonctionne pas. Sauf, si c'est la companie doit être sauvegardé la première fois.

with Ma_table do
Ma_table.Append;
Ma_table.FieldValues['mon_client']:= edt_client.Text;
Ma_table.Post;



LunaSoft
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
18 mars 2010 à 09:10
pour faire une édition, le mieux est d'utiliser
un locate (true/false)
si la fonction renvoie true alors tu es calé sur l'enregistrement et donc tu peux faire :

Query.Edit;
QueryCHAMP.text := 'Ta valeur';
Query.Post;



cantador
0