Une recherche positive empêchant une sauvegarde...

Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
- - Dernière réponse : cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
- 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
Afficher la suite 

4 réponses

Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
bonsoir,

compagnie ou companie ?
Commenter la réponse de beckerich
Messages postés
75
Date d'inscription
samedi 28 juin 2008
Statut
Membre
Dernière intervention
16 août 2011
0
Merci
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
Commenter la réponse de Lunasoft
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
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
Commenter la réponse de cs_cantador